开门见山,上官网链接:Multiple databases。
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': "test",
'USER': "test",
'PASSWORD': "123456",
'HOST': "xxx.xxx.xxx.41",
'PORT': 5432,
},
'slave': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': "test",
'USER': "test",
'PASSWORD': "123456",
'HOST': "xxx.xxx.xxx.74",
'PORT': 5432,
},
}
# 数据库路由配置
DATABASE_ROUTERS = [
'common.databases_routers.MasterSlaveRouter', # 主从数据库路由配置
]
数据库路由是用来决定ORM在查询时使用哪一个配置,同时也可以在更多的多数据库场景下去定义某一次查询应该如何选择数据库。
# databases_routers.py
class MasterSlaveRouter:
"""主从复制路由"""
@staticmethod
def db_for_read(model, **hints):
""" 当xxx 读数据时,使用指定setting配置的数据库yyy """
# if model._meta.app_label == "xxx":
# return "yyy"
return "salve"
@staticmethod
def db_for_write(model, **hints):
""" 当xxx应用 写的时候,使用指定setting配置的数据库yyy"""
# if model._meta.app_label == "xxx":
# return "yyy"
return "default"
@staticmethod
def allow_relation(obj1, obj2, **hints):
return None
@staticmethod
def allow_migrate(db, app_label, model_name=None, **hints):
""" python manage.py migrate --database=slave
django默认迁移 default 数据库
"""
return True
主从同步默认情况下数据库是会从主数据库同步数据到从数据库上的,如果是这种架构那么这里我们只用关心主数据库的情况,所以在迁移的时候只要我们定义的数据库为default那么和以前单数据库迁移方式一致。如果时多个数据那么就需要用--database=slave
指定迁移到slave数据库。