gpt4 book ai didi

django - django 中的多个数据库 -syncdb 不会创建 django_ 表

转载 作者:行者123 更新时间:2023-12-02 02:19:10 28 4
gpt4 key购买 nike

我在 Django 中使用多个数据库时遇到问题。

这是场景:

我有一个django项目,它分为两个应用程序:app1app2App1 将负责身份验证和自定义模块(即它有自己的 models.py),而 App2 是普通的 Web 应用程序(即。它有自己的 models.py ,其中包含模型)。

Settings.py 看起来像这样:

DATABASE_ROUTERS = ['app1.router.AuthRouter', 'app1.router.App1Router', 'app2.router.App2Router']

DATABASES = {
'default': {
[...]
},
'app2': {
[...]
}
}

如您所见,我有两个数据库(均为 PSQL 9.2),default(用于 app1 应用程序)和 app2(用于对于 app2 应用程序),我定义了这样 3 个路由器(1. 用于身份验证,2. 用于 app1 模型,最后一个用于 app2 模型

app1.router.AuthRouterapp1.router.App1Router 的代码如下:

class AuthRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'auth':
return 'default'
return None

def db_for_write(self, model, **hints):
if model._meta.app_label == 'auth':
return 'default'
return None

def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'auth' or obj2._meta.app_label == 'auth':
return True
return None

def allow_syncdb(self, db, model):
if db == 'default':
return model._meta.app_label == 'auth'
elif model._meta.app_label == 'auth':
return False
return None


class App1Router(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'app1':
return 'default'
return None

def db_for_write(self, model, **hints):
if model._meta.app_label == 'app1':
return 'default'
return None

def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'app1' or obj2._meta.app_label == 'app1':
return True
return None

def allow_syncdb(self, db, model):
if db == 'default':
return model._meta.app_label == 'app1'
elif model._meta.app_label == 'app1':
return False
return None

问题是,当我执行 syncdb 时,它确实正确创建了 auth_ 表,但它没有创建 django_ 表,这会失败错误。

[marek@t420 multipledb_test]$ python manage.py syncdb 
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
[more errors coming]
django.db.utils.ProgrammingError: relation "django_content_type" does not exist
LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co...

你看到了吗?没有创建 DJANGO 表 - 没有 django_admin_log、没有 django_content_type、没有 django_session!!!

有什么提示吗?这让我发疯了三天!

最佳答案

只是一条评论:我的想法是使用一些数据库,它们将相互通信(例如,使用从一个数据库到另一个数据库的外键)。我希望我能更仔细地阅读文档:

Cross-database relations Django doesn’t currently provide any support for foreign key or many-to-many relationships spanning multiple databases. If you have used a router to partition models to different databases, any foreign key and many-to-many relationships defined by those models must be internal to a single database.

所有这些困惑都是徒劳的,因为完整性约束不允许在多个数据库上使用任何关系。

关于django - django 中的多个数据库 -syncdb 不会创建 django_ 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21139825/

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