Django复制副本数据保存到多个数据库
从django文档中,可以从数据库创建复制副本,并定义它将写入或读取的位置。() 然后,它为它编写代码,配置我的Django复制副本数据保存到多个数据库,django,database,django-rest-framework,Django,Database,Django Rest Framework,从django文档中,可以从数据库创建复制副本,并定义它将写入或读取的位置。() 然后,它为它编写代码,配置我的数据库如下: DATABASES = { 'default': { 'NAME': 'my_write_database', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'writedatabase', },
数据库如下:
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
但这并不正确。当我写的时候,它只写在默认值中
,不反映到副本中
。然后,当我读取副本
时,这些值不存在
他不应该写入默认值
并复制副本
中的值吗?我正在使用django rest框架
这段代码与文档非常相似,我不知道出了什么问题。或者我不理解django文档?django无法为您解决复制问题
一个数据库用于写入,多个副本用于读取的常用方法。复制是在数据库级别(而不是django)完成的,即数据库配置为写入其事务日志、读取副本、同步此日志并重播它
Django配置允许为读写指定不同的数据库URL,和/或为不同的应用程序甚至表指定不同的数据库,这更重要的是复制,而不是复制