複数のデータベース用に 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)
このエラーは、2 番目の読み取りデータベースが my で指定されている場合にのみsettings.py
発生します。データベースのみdefault
が存在する場合、syncdb コマンドは正常に完了します。
これを引き起こしている可能性のある提案はありますか?
編集: Djangoのバージョンは1.2.3です