如何自动在Django中的多个数据库服务器之间切换。

时间:2017-11-20 05:42:47

标签: mysql sql-server django database django-models

我已经设置了一个Master远程MySQL数据库服务器和它的副本,它被配置为我的Django应用程序的从属数据库。两者都在亚马逊ubuntu ec2实例上运行。如果主数据库关闭,如何配置Django自动访问从数据库。?

1 个答案:

答案 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