django - 在 django 中,如果我有多个数据库,我如何告诉 django 在哪个数据库中创建哪个模型表?
问题描述
例如我有这两个数据库。现在在创建模型类时,我如何告诉 django 在“电影”数据库而不是“默认”数据库中启动该模型表。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'projectInfo',
'USER': 'root',
'PASSWORD': '123@abc',
},
'movie': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'movieDB',
'USER': 'root',
'PASSWORD': '123@abc',
}
}
解决方案
您可以构建一个数据库路由器 [Django-doc]。这根据模型指定它应该路由到哪个数据库。例如,如果要在movie.Movie
模型中路由movie
模型,请使用:
class MyRouter:
special_routing = {
'movie.Movie': 'movie'
}
def db_for_read(self, model, **hints):
return self.special_routing.get(model._meta.label)
def db_for_write(self, model, **hints):
return self.special_routing.get(model._meta.label)
def allow_relation(self, obj1, obj2, **hints):
return self.special_routing.get(obj1._model._meta.label) == self.special_routing.get(obj2._model._meta.label)
def allow_migrate(self, db, app_label, model_name=None, **hints):
return db == self.special_routing.get(f'{app_label}_{model_name}', 'default')
然后我们可以将它添加到DATABASE_ROUTERS
设置 [Django-doc] 中:
DATABASE_ROUTERS = ['path.to.MyRouter']
您可以编写更复杂的路由器,从而提示要写入的数据库。
推荐阅读
- swift - 同时搜索2个属性CoreData
- python - Python:Conda 环境的需求文件
- macos - 视频过滤代码适用于 iOS,但不适用于 macOS
- r - 如何通过ggplot中每个方面的x轴值对箱线图进行排序?
- php - PHP将textarea字段中的每个新行计数为新行并包装在列表项中
- python - 自定义损失函数,Keras \\ ValueError: No gradients
- reactjs - React Bootstrap Cards 和 CardDeck 组件 - 响应式布局
- c++ - std::same_as 和 std::is_same 之间的区别
- search - 有效地从一个文件中查找另一个文件中的行
- neo4j - 在节点值中找到“GAP”?还是下一个?