여러 데이터베이스에 대해 Django 응용 프로그램을 구성하는 중이고 stop-gap 측정으로 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)
이 오류 default
데이터베이스가있을 때 두 번째 읽기 데이터베이스가 내 settings.py
에 sepcified 때 발생합니다. syncdb 명령이 성공적으로 완료됩니다.
어떤 원인 일 수 있습니까?
편집 : 장고 버전은 땜질 몇 시간 후 1.2.3
:
이에 대한 해결책은 다음과 같이 내
db_for_read
방법을 변경했다? 'post_syncdb'가 두 번 트리거 된 것처럼 보입니다. – okm'DATABASE_ROUTERS = [ 'path.to.MasterSlaveRouter']'는 설정 파일에 있습니다. – majackson
OK, 실제'path.to'를 보여줄 수 있고,'MasterSlaveRouter'를 설정에 넣고'DATABASE_ROUTERS = [ 'settings.MasterSlaveRouter']'를 설정하려고 할 수 있습니까? – okm