Database Django多数据库和;无法在只读事务中执行";错误
我使用在主从配置中设置多个数据库。我的路由器设置正确,并且我可以看到读写操作进入了正确的相应数据库,但是我的一些API调用遇到了错误:Database Django多数据库和;无法在只读事务中执行";错误,database,django,Database,Django,我使用在主从配置中设置多个数据库。我的路由器设置正确,并且我可以看到读写操作进入了正确的相应数据库,但是我的一些API调用遇到了错误: 无法在只读事务中执行[更新或删除] 在发生这种情况的API处理程序中,作为同一调用的一部分,我正在更新或删除一些其他模型,Django似乎希望对这些事务使用从属数据库,而不是主数据库 是在update()或delete()之前使用('default')链接。这基本上迫使Django使用主数据库进行更新或删除。但这感觉很粗糙,有绷带的味道,所以我想确定没有更好的方
无法在只读事务中执行[更新或删除]
在发生这种情况的API处理程序中,作为同一调用的一部分,我正在更新或删除一些其他模型,Django似乎希望对这些事务使用从属数据库,而不是主数据库
是在update()
或delete()
之前使用('default')链接。这基本上迫使Django使用主数据库进行更新或删除。但这感觉很粗糙,有绷带的味道,所以我想确定没有更好的方法
非常感谢您的帮助。您尝试过以下方法吗?这是从Django文档页面复制的:
import random
class MasterSlaveRouter(object):
def db_for_read(self, model, **hints):
"""
Reads go to a randomly-chosen slave.
"""
return random.choice(['slave1', 'slave2'])
def db_for_write(self, model, **hints):
"""
Writes always go to master.
"""
return 'master'
def allow_relation(self, obj1, obj2, **hints):
"""
Relations between objects are allowed if both objects are
in the master/slave pool.
"""
db_list = ('master', 'slave1', 'slave2')
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
最后,在设置文件中,我们添加以下内容(将path.to.替换为定义路由器的模块的实际python路径):
如果不在代码中使用('default')
,似乎无法做到这一点。是的,我已经正确设置了路由器。我会更新我的问题,这样说。
DATABASE_ROUTERS = ['path.to.AuthRouter', 'path.to.MasterSlaveRouter']