我已经设置了一个Master远程MySQL数据库服务器和它的副本,它被配置为我的Django应用程序的从属数据库。两者都在亚马逊ubuntu ec2实例上运行。如果主数据库关闭,如何配置Django自动访问从数据库。?
答案 0 :(得分:1)
Djangor使用db router来解决这个问题, 我举个例子:
class DBRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth_db.
"""
if model._meta.app_label == 'xxx':
return 'salvedb' # this name you defined in settings of django project
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth_db.
"""
if model._meta.app_label == 'xxx':
return 'salvedb'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
#if obj1._meta.app_label == 'auth' or \
# obj2._meta.app_label == 'auth':
# return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth app only appears in the 'auth_db'
database.
"""
#if app_label == 'auth':
# return db == 'auth_db'
return None
并将此路由器添加到您的设置中:
DATABASE_ROUTERS = ['path.routers.DBRouter']
或者您可以阅读django官方网站上的文档:https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#automatic-database-routing