gpt4 book ai didi

python - 如何在 Django 1.4 中使用数据库路由器

转载 作者:太空狗 更新时间:2023-10-30 03:04:56 25 4
gpt4 key购买 nike

我一直在尝试设置 Django 1.4.3 以使用多个数据库,但我无法让它正常工作。我阅读了有关 SO 的文档和帖子,并执行了以下操作:

1)settings.py中添加第二个DB配置,如下:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/tmp/django.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
'db1' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'USER': 'fake',
'PASSWORD': 'fake',
'HOST': 'fake.host.com',
'PORT': '3306',
},
}

2)创建一个routers.py并定义一个DB router如下
(注意:根据 SO 帖子,如果您在 models.py 中定义了一个 DB 路由器,该路由器将不起作用)

class DBRouter(object):
def db_for_read(self, model, **hints):
return 'db1'

def db_for_write(self, model, **hints):
return 'db1'

def allow_syncdb(self, db, model):
return 'db1'

3) 将以下行添加到 settings.py
(注意:根据 SO 帖子,这些行必须在 DATABASES 配置之后

from django.db import connections
DATABASE_ROUTERS = ['fakeproject.routers.DBRouter',]

这是错误的。不要将 from django.db import connections 放在这里,因为它会阻止注册路由器

我的症状:
显然,我所有的电话都是通过默认数据库路由的。详情如下:

  • 两个数据库设置都有效(我可以成功执行 manage.py indpectdb --database db1

  • DATABASE_ROUTERS 设置不会产生任何提示(即使我输入了错误的数据库路由器路径,甚至是非字符串对象)

  • 当我尝试通过 manage.py shell 访问我的对象时,我可以执行 MyModel.objects.all() 但当我实际尝试迭代时它,我被告知没有这样的表。默认数据库没有该表,但“db1”显然有它,因为我通过在其上使用 inspectdb 生成了模型。作为证明,如果我在 db1default 之间交换数据库配置,我可以毫无问题地访问该对象。

非常感谢任何帮助!

最佳答案

我发现步骤 3 中的语句“from django.db import connections
”阻止了数据库路由器的注册。当我删除此语句时,路由器已注册并且一切都开始按预期工作。

关于python - 如何在 Django 1.4 中使用数据库路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com