Подключите модель Django к другому имени таблицы с одинаковой структурой - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть база данных, куда я импортирую данные с фондового рынка.Все это будут идентичные таблицы, отличающиеся только датой.Как бы я связал модель django с именем динамической таблицы?

1 Ответ

1 голос
/ 07 апреля 2019

Вы можете использовать опцию db_table в моделях Meta для указания другого имени таблицы, подобного этому.

class YourModel(models.Model):
    ...

    class Meta:
        db_table = 'YOUR_TABLE_NAME'

Это будет работать, только если ваша таблица находится в той же базе данных, которую вы используете по умолчанию вНастройки Django.Однако, если эта база данных отличается от базы данных по умолчанию, вам необходимо добавить ее в конфигурации DATABASES под другим именем и создать собственный маршрутизатор базы данных для правильной маршрутизации, подобной этой.

settings.py

DATABASES = {
    ...
    'other': {
        'NAME': 'primary',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'spam',
    }, 

}
DATABASE_ROUTERS = ['path.to.YourRouter']

routers.py (создайте его)

class YourRouter:
    def db_for_read(self, model, **hints):
        if model._meta.model_name == 'yourmodel':
            return 'other'
        return None

    def db_for_write(self, model, **hints):
        if model._meta.model_name == 'yourmodel':
            return 'other'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        return False

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...