Из django документации, возможно создать реплику из базы данных и определить, куда она будет писать или читать. (django несколько баз данных ).
Затем он написал код для него, настроив мой DATABASE
как:
DATABASES = {
'default': {
'NAME': 'my_write_database',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'writedatabase',
},
'replica': {
'NAME': 'replica',
'ENGINE': 'django.db.backends.mysql',
'USER': 'mysql_user',
'PASSWORD': 'readdatabase',
},
}
И создайте маршрутизатор :
class ReplicaDatabaseWriteRead(object):
route_app_labels = {..all_possible_applications}
def db_for_read(self, model, **hints):
return 'replica' # O just wanna read from 'replica'
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'default' # I wanna write in default and 'reflect' to 'replica'
return None
def allow_relation(self, obj1, obj2, **hints):
db_list = (..all_possible_apps)
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
Но это не работает правильно. Когда я пишу, он просто пишет в default
, не отражая в replica
. Затем, когда я читаю replica
, значения не выходят.
Разве он не должен был записать в default
и повторить значение в replica
? Я использую django -rest-framework Этот код очень похож на документацию, я не знаю, что не так. Или я не понимаю django документацию?