여러 장의 데이터베이스를 사용하기 위해 장고 1.4.3을 설치하려고했지만, 정상적으로 작동하지 않습니다. 나는 SO에 대한 설명서 및 게시물을 읽고 한 다음Django에서 DB 라우터를 사용하는 방법 1.4
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/tmp/django.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
},
'db1' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'USER': 'fake',
'PASSWORD': 'fake',
'HOST': 'fake.host.com',
'PORT': '3306',
},
}
2)는 routers.py
을 작성하고 정의 다음과 같이
1)는 settings.py
에서 두 번째 DB 구성을 추가 DB 라우터
(참고 : models.py
의 DB 라우터를 정의하는 경우 SO 게시물에 따르면, 라우터가 작동하지 않습니다) 다음과 같이
class DBRouter(object):
def db_for_read(self, model, **hints):
return 'db1'
def db_for_write(self, model, **hints):
return 'db1'
def allow_syncdb(self, db, model):
return 'db1'
을
3)는 settings.py
(주 다음 줄을 추가합니다 : SO 게시물에 따르면,이 라인이 잘못했다 DATABASES
구성
from django.db import connections
DATABASE_ROUTERS = ['fakeproject.routers.DBRouter',]
이후 여야합니다.
은 분명히, 내 모든 통화는 기본 DB를 통해 라우팅 : 그것은
내 증상을 등록 할 라우터를 방지 여기 from django.db import connections
을 넣어하지 마십시오.
두 DB 설정 작업 (I 성공적으로
내가DATABASE_ROUTERS
설정은 심지어 비 DB를 라우터에 잘못된 경로를 넣어, 또는 경우 (모든 불평 생성하지 않습니다manage.py indpectdb --database db1
을 수행 할 수 있습니다 자세한 내용은 아래 문자열 실제로 그것을 반복하려고 할 때, 나는no such table
에게있어MyModel.objects.all()
을 할 수manage.py shell
를 통해 내 개체에 액세스하려고하지만. 기본값은 DB가 해당 테이블이없는 개체),하지만 'DB1' 내가 모델을 생성했을 때 분명히 가지고있다. 그것에
inspectdb
를 사용하여. DB 구성을db1
과default
사이에 바꿔 넣으면 문제없이 개체에 액세스 할 수 있습니다.
매우 도움이 되었습니까?
답변 해 주셔서 감사합니다. 그 사이에 서브 클래스를 갖는 것이 왜 문제를 해결할 수 있습니까? –
'DATABASE_ROUTERS'에 두 개의 클래스가 필요합니다 - 각 DB에 하나씩. 저는 DRY 코드를 선호하기 때문에 하위 클래스로 분류됩니다 (두 클래스로 다시 작성할 수 있지만 코드는 거의 동일합니다). – danodonovan