我一直在使用手动数据库选择来处理一个有两个分离数据库的项目。我已经在设置中定义了我的数据库。
阅读了一些资料之后,似乎数据库路由才是应该采用的方法。然而,在阅读文档和这里的一些相关帖子之后,我比以往更加困惑了。
在我的设置中,我有:
DATABASES = {
'default': {
....
},
'my_db2': {
....
}
}
DATABASE_ROUTERS = ['myapp2.models.MyDB2Router',]
我知道我必须像下面这样定义我的路由器类(我认为在myapp2.models.py
文件中):
I know I have to define my router class (I think in myapp2.models.py
file) like so:
class MyDB2Router(object):
"""A router to control all database operations on models in
the myapp2 application"""
def db_for_read(self, model, **hints):
if model._meta.app_label == 'myapp2':
return 'my_db2'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'myapp2':
return 'my_db2'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'myapp2' or obj2._meta.app_label == 'myapp2':
return True
return None
def allow_syncdb(self, db, model):
if db == 'my_db2':
return model._meta.app_label == 'myapp2'
elif model._meta.app_label == 'myapp2':
return False
return None
那接下来呢?每个模型都需要一个 meta.app_label
吗?还是这是自动的?
除此之外,我仍然遇到了一个错误:
django.core.exceptions.ImproperlyConfigured: 导入数据库路由器 JournalRouter 出错:"不能导入名称为 connection 的模块"
有人能帮助我理解正在发生的事情以及出了什么问题吗?非常感谢任何帮助。
models.py
之外时,才需要使用app_label
选项,否则它会自动分配。 - Alasdair