Python Django多数据库如何写入路由器

Python Django多数据库如何写入路由器,python,django,django-database,Python,Django,Django Database,我有两个DB,我写了一个router.py,它可以正确地管理写和读,但是如果默认的读DB关闭了,我就不能访问得到 class TestRouter(object): def db_for_read(self, model, **hints): if model._meta.app_label == 'read_app': return 'default' if model._meta.app_label == 'write_ap

我有两个DB,我写了一个router.py,它可以正确地管理写和读,但是如果默认的读DB关闭了,我就不能访问得到

class TestRouter(object):

    def db_for_read(self, model, **hints):

        if model._meta.app_label == 'read_app':
            return 'default'
        if model._meta.app_label == 'write_app':
            return 'write_db'        
        return None

    def db_for_write(self, model, **hints):

        if model._meta.app_label == 'write_app':
            return 'write_db'
        return None
在settings.py中:

这就是错误:

cnn=连接DSN,连接工厂=连接工厂, 异步=异步 操作错误:无法连接到服务器:连接 拒绝是指在主机192.168.2.1上运行并接受的服务器 端口5432上的TCP/IP连接


有没有办法告诉django忽略连接到默认数据库的故障?

错误表明您要连接的数据库未接受请求或未侦听来自主机192.168.2.1的请求

在postgresql.conf文件中,更改侦听地址='*'

让我详细说明你应该做什么

在settings.py中添加数据库信息,以及关于routers.py的信息: 设置.py

创建routers.py,它将处理在设置中提到的数据库之间切换读写请求: 路由器.py

所以现在如果你的主人倒下了,奴隶站起来了。请求将相应地转移,反之亦然。确保任何一个数据库都已启动

嗯!:

DATABASE_ROUTERS = ['prj.dbrouter.TestRouter', ]
DATABASES = {
    'default': {},
    'master': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': 5432,
    },
    'slave': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': 5432,
    }
}
SLAVE_DATABASES = ['slave']

DATABASE_ROUTERS = ['path.to.your.routers.MasterSlaveRouter']
from django.conf import settings
import socket


def test_connection_to_db(database_name):
    try:
        db_definition = getattr(settings, 'DATABASES')[database_name]
        s = socket.create_connection(
            (db_definition['HOST'], db_definition['PORT']), 5)
        s.close()
        return True
    except:
        return False


class MasterSlaveRouter(object):
    def db_for_read(self, model, **hints):
        """
        Reads go to a randomly-chosen slave.
        """
        if test_connection_to_db('master'):
            return 'master'
        return 'slave'

    def db_for_write(self, model, **hints):
        """
        Writes always go to master.
        """
        if test_connection_to_db('master'):
            return 'master'
        return 'slave'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Relations between objects are allowed if both objects are
        in the master/slave pool.
        """
        db_list = ('master', 'slave')
        if obj1._state.db in db_list and obj2._state.db in db_list:
            return True
        return None

    def allow_migrate(self, db, model):
        """
        All non-auth models end up in this pool.
        """
        return True