1

複数のデータベース用に 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です

4

1 に答える 1