我需要创建一个新的数据库连接( session )以避免在我的 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
有谁知道如何使用自定义数据库连接来调用过程?
最佳答案
如果你看一下 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 可能被认为是内部 API,可能会更改,恕不另行通知。
要关闭连接,在 create_connection
函数返回的对象上调用 .close()
就足够了:
conn = create_connection()
# do some stuff
conn.close()
关于python - 如何在django中创建新的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733112/