私はDjangoアプリケーションを複数のデータベース用に設定していますが、ストップギャップ対策としてsettings.py :Django syncdb複数のデータベースが指定されているときに重複する行を挿入しようとしています
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
は、推測しているように、読み取りアクセス権のみを持っています。
私のデータベース・ルータは、次のようになります。実行に失敗しています
django.db.utils.IntegrityError: (1062, "Duplicate entry 'auth-permission' for key 'app_label'")
問題のあるSQL:syncdbの実行を実行している場合
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',)
、それが今エラーで、スーパーユーザを設定した直後にクラッシュしますis:
INSERT INTO `django_content_type` (`name`, `app_label`, `model`) VALUES (permission, auth, permission)
このエラーは、settings.py
に2番目の読み取りデータベースがsepcifiedされたときに発生します。default
データベースのみが存在する場合、syncdbコマンドは正常に完了します。
何が原因である可能性がありますか?
編集: Djangoのバージョンは工夫の数時間後に1.2.3
:
これを解決するには、このような何かに私の方法を変更することでしたか? 'post_syncdb'が2回トリガされたようです。 – okm
'DATABASE_ROUTERS = ['path.to.MasterSlaveRouter']'は設定ファイルにあります。 – majackson
OK、実際の 'path.to'を表示し、' MasterSlaveRouter'を設定内に入れて、 'DATABASE_ROUTERS = ['settings.MasterSlaveRouter']'を設定することができますか? – okm