Как перенести только необходимые таблицы моделей при использовании нескольких БД в django
Я пробовал переносить модели при использовании нескольких БД в django. Он создает все таблицы в обеих БД по умолчанию, можем ли мы настроить его так, чтобы ненужные таблицы не создавались в БД.
Я использую это прямо сейчас для миграции.
def allow_migrate(self, db, app_label, model_name=None, **hints):
# checking if model hasattr() to migrate in which db
if hints:
if hasattr(hints['model'],'use_db'):
return db == getattr(hints['model'],'use_db')
return None
Создайте каталог router в корневой папке. Создайте в нем файл router.py, предположим, что у вас есть две базы данных, настроенные в settings.py, одна с именем 'primary', а другая 'secondary'
Теперь направьте миграцию таким образом, чтобы она разрешала миграцию только на определенные приложения из списка. Теперь каждая база данных будет содержать модель только разрешенных приложений.
class Secondary:
route_app_labels = ['categories','products']
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'secondary'
return None
class Primary:
route_app_labels = ['account',
'admin',
'auth',
'authtoken',
'contenttypes']
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'primary'
return None
База данных и маршруты в файле settings.py:
DATABASES = {
'primary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': config('POSTGRES_DB_NAME'),
'USER': config('POSTGRES_DB_USER'),
'PASSWORD': config('POSTGRES_DB_PASSWORD'),
'HOST': config('POSTGRES_DB_HOST'),
'PORT': config('POSTGRES_DB_PORT'),
'TEST': {
'DEPENDENCIES': [],
},
},
'secondary': {
'ENGINE': 'django.db.backends.mysql',
'NAME': config('MYSQL_DB_NAME'),
'USER': config('MYSQL_DB_USER'),
'PASSWORD': config('MYSQL_DB_PASSWORD'),
'HOST': config('MYSQL_DB_HOST'),
'PORT': config('MYSQL_DB_PORT'),
'TEST': {
'DEPENDENCIES': ['primary'],
},
}
DATABASE_ROUTERS = ['routers.router.Primary', 'routers.router.Secondary', ]
Примечание: Убедитесь, что предыдущие миграции очищены/удалены, иначе предыдущие миграции создадут таблицы.