如果在 django 中使用多个数据库,如何仅迁移所需的模型表
Posted
技术标签:
【中文标题】如果在 django 中使用多个数据库,如何仅迁移所需的模型表【英文标题】:How to Migrate only required models table if using Multiple DB in django 【发布时间】:2021-11-21 23:00:24 【问题描述】:我尝试在 django 中使用 Multiple DB 时迁移模型。默认情况下在两个数据库中创建所有表,我们可以自定义它以便在另一个数据库中无法创建不必要的表。
我现在正在使用它进行迁移。
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
【问题讨论】:
【参考方案1】:在根文件夹中创建一个路由器目录。 在其中创建 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', ]
注意:确保清除/删除之前的迁移,否则之前的迁移将创建表。
【讨论】:
以上是关于如果在 django 中使用多个数据库,如何仅迁移所需的模型表的主要内容,如果未能解决你的问题,请参考以下文章
在 django 中:使用多个插件加载 jquery 时出现问题 - 或者:如何仅加载 jQuery 一次?