我在Django 1.4(python 2.6)上遇到了DB Router问题。我已按照文档(https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing),但当我运行我的服务器时,我有以下错误消息:
django.core.exceptions.ImproperlyConfigured: Error importing database router MyDBRouter: "cannot import name connection"
我的settings.py
DATABASES = {
'default': {
...
},
'other' : {
...
}
}
DATABASE_ROUTERS = ['core.models.MyDBRouter',]
这里是db路由器代码:
class MyAppRouter(object):
def db_for_read(self, model, **hints):
"Point all operations on myapp models to 'other'"
if model._meta.app_label == 'myapp':
return 'other'
return None
def db_for_write(self, model, **hints):
"Point all operations on myapp models to 'other'"
if model._meta.app_label == 'myapp':
return 'other'
return None
def allow_relation(self, obj1, obj2, **hints):
"Allow any relation if a model in myapp is involved"
if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
return True
return None
def allow_syncdb(self, db, model):
"Make sure the myapp app only appears on the 'other' db"
if db == 'other':
return model._meta.app_label == 'myapp'
elif model._meta.app_label == 'myapp':
return False
return None
我尝试用'default'替换None,但它仍然不起作用。
答案 0 :(得分:4)
我通过在settings.py上添加“来自django.db导入连接”解决了这个问题
151 # Database router
152 from django.db import connections
153 DATABASE_ROUTERS = ['core.models.MyDBRouter',]
现在服务器运行良好!但路由器只是由django忽略了 - >要修复它,永远不要在模型中保存路由器!创建新文件
答案 1 :(得分:1)
这对我没有好处,我在这里发布了我的解决方案https://stackoverflow.com/a/17888067/978912,也许它可以通过无休止的导入链节省人们调试的痛苦。 :)
答案 2 :(得分:1)
就像Zakum
在他的解决方案中所说的那样,
如果上述解决方案不适合您,请查看您是否进行了导入
from django.db.models import Model
在任何路由文件中。如果是这样,你必须删除它。
答案 3 :(得分:0)
对我来说,问题是在我的某个应用的__init__.py
文件中编码的。我认为init文件是settings.py
文件的直接依赖关系,这可能会导致循环导入。