1

我正在使用 django 多数据库路由器概念,有多个具有不同数据库的站点。基本数据库用户将使用所有其他子站点登录。

当我在基本站点中尝试同步数据库时,它可以正常工作(在任何时候),但是尝试其他站点同步数据库只能在第一次工作,如果我们下次继续尝试,它会抛出如下所示的整体错误

  • django.db.utils.IntegrityError:(1062,“重复条目'22-add_somesame'键'content_type_id'”)

一旦我删除了该项目中的多个数据库路由器设置,就意味着 syncdb 可以正常工作(在任何时候)。

那么这与多个数据库路由器有关吗?还是什么?

请哪位大神给点意见,谢谢。

4

1 回答 1

1

这里的问题在于 db 路由器和 django 系统对象。我在多个数据库和路由器上遇到了同样的问题。我记得这里的问题是 auth.permission 内容类型,它们混合在数据库之间。否则,syncdb 脚本会尝试在所有数据库中创建这些,然后它会为某些对象创建权限内容类型,该 id 已为本地模型保留。

我有以下

BASE_DB_TYPES = (
 'auth.user',
 'auth.group',
 'auth.permission',
 'sessions.session',

)

然后在数据库路由器中:

def db_for_read(self, model, **hints):
    if hasattr(model, '_meta') and str(model._meta) in BASE_DB_TYPES:
        return 'base_db' # the alias of base db that will store users
    return None # the default database, or some custom mapping

编辑

此外,异常可能会说您正在add_somesame为您的模型“ ”声明权限“ somesame”,而 Django 会自动为所有对象创建add_, delete_,权限。edit_

于 2012-06-26T13:15:28.443 回答