我需要创建一个新的数据库连接(会话),以避免在Django事务中来自MySql过程的意外提交。如何在Django中设置它?
我试图在设置文件中复制数据库配置。它对我有用,但似乎不是一个好的解决方案。有关更多详细信息,请参见我的代码。
@classmethod
def get_sequence_no(cls, name='', enable_transaction=False):
"""
return the sequence no for the given key name
"""
if enable_transaction:
valobj = cls.objects.using('sequence_no').raw("call sp_get_next_id('%s')" % name)
return valobj[0].current_val
else:
valobj = cls.objects.raw("call sp_get_next_id('%s')" % name)
return valobj[0].current_val
有人知道如何使用自定义数据库连接来调用该过程吗?
答案 0 :(得分:2)
如果您查看django.db
模块,则可以看到django.db.connection
是django.db.connections[DEFAULT_DB_ALIAS]
的代理,而django.db.connections
是django.db.utils.ConnectionHandler
的实例
将其放在一起,您应该能够获得如下所示的新连接:
from django.db import connections
from django.db.utils import DEFAULT_DB_ALIAS, load_backend
def create_connection(alias=DEFAULT_DB_ALIAS):
connections.ensure_defaults(alias)
connections.prepare_test_settings(alias)
db = connections.databases[alias]
backend = load_backend(db['ENGINE'])
return backend.DatabaseWrapper(db, alias)
请注意,此函数每次被调用时都会打开一个新连接,您有责任关闭它。另外,它使用的API可能被认为是内部的,并且可能会更改,恕不另行通知。