두 데이터베이스에 연결하는 Django 앱이 있습니다. 내 DB 중 하나가 다른 (프로덕션) 서버에 있습니다. 앱을 개발할 때 실수로 프로덕션 서버에서 모델을 마이그레이션하지 않도록하고 싶습니다. 나의 이해는 이것이다 :Django는 원격 데이터베이스에서 마이그레이션을 방지합니다
DATABASES = {
'default': {},
'remote_db': {
'NAME' : 'important_remote_db_name',
'ENGINE' : 'django.db.backends.mysql',
'USER' : 'someuser',
'PASSWORD': 'somepass',
'HOST' : 'some.production.host.com',
'PORT' : '3306',
},
'myapp_db': {
'NAME' : 'my_app_db_name',
'ENGINE' : 'django.db.backends.mysql',
'USER' : 'localuser',
'PASSWORD': 'localpassword'
}
}
지금은 또한 RemoteDBRouter라는 라우터 클래스가 있다고 가정 내 settings.py 데이터베이스를 가정하는 것은 이것이다. 모든 라우터와 마찬가지로 해당 클래스에는 allow_migrate 메소드가 있습니다. 원격 DB는 Django auth 모델을 사용하므로 사용자 모델은 app_label 'auth'를 가지며 원격 DB는 app_label 'remoteapp'가있는 자체 모델을가집니다. 이 정보를 통해 allow_migrate 메소드에 대한 두 가지 가능성을 알 수 있습니다.
#OPTION 1
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'auth' or app_label == 'remoteapp':
return db == 'remote_db'
return None
#OPTION 2
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'auth' or app_label == 'remoteapp':
return False
return None
어느 것을 사용해야합니까? 옵션 2는 app_label이 모델이 원격 DB에 있다고 말하는 모든 모델을 마이그레이션해서는 안된다고하는 점에서 더 쉽습니다. 옵션 1은 db 필드가 'remote_db'인지 확인하기 위해 추가 검사를 수행합니다 ('remote_db'가 아니라 'remote_db_name'을 확인해야한다고 가정합니다). 내가 사용하는 것이 중요합니까? 옵션 1을 사용하고 db 검사가 실패하면 메서드는 None을 반환하고 Django 코드는 allow_migrate가 True를 반환하는 다음 라우터 클래스를 검사합니다.
때때로 원격 DB를 한 번씩 로컬 데이터베이스에 덤프하지 않는 이유는 무엇입니까? –