我正在为多个数据库配置我的 Django 应用程序,作为权宜之计,我在我的 settings.py 中使用以下配置:
READ_DATABASE = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'thedatabase',
'USER': 'read_only',
'PASSWORD': '',
'OPTIONS': {
'init_command': 'SET storage_engine=INNODB'
}
}
WRITE_DATABASE = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'thedatabase',
'USER': 'root',
'PASSWORD': '',
'OPTIONS': {
'init_command': 'SET storage_engine=INNODB'
}
}
DATABASES = {'default': WRITE_DATABASE,
'read': READ_DATABASE}
它们指向同一个数据库,以模拟主从对。正如您可能猜到的read_only
那样,用户只有读取权限。
我的数据库路由器如下所示:
from django.conf import settings
class MasterSlaveRouter(object):
def db_for_read(self, model, **hints):
return 'read'
def db_for_write(self, model, **hints):
return 'default'
def allow_relation(self, db1, db2, **hints):
return True
def allow_syncdb(self, db, model):
return db in ('default',)
运行 syncdb 时,它现在在设置超级用户后立即崩溃,并出现错误:
django.db.utils.IntegrityError: (1062, "Duplicate entry 'auth-permission' for key 'app_label'")
未能执行的有问题的 SQL 是:
INSERT INTO `django_content_type` (`name`, `app_label`, `model`) VALUES (permission, auth, permission)
此错误仅在 my 中指定第二个读取数据库时发生settings.py
,当仅存在default
数据库时,syncdb 命令成功完成。
有什么建议可能导致这种情况吗?
编辑: Django 版本是 1.2.3