python - 如何在django中创建新的数据库连接

标签 python mysql django transactions

我需要创建一个新的数据库连接( 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.connectiondjango.db.connections 的代理[DEFAULT_DB_ALIAS]django.db.connectionsdjango.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/

相关文章:

python - 在 lxml 中使用 etree 时出错

python - celery 抛出长错误信息

mysql - 将邮件放入 Rails : Pop3/Imap or direct MySQL query? 的速度更快

php - 无法从单独的文件中检索数据库连接信息

python - MySQL升级后django未处理的异常

python - 有没有办法在 Python 中为 lxml 指定固定(或可变)数量的元素

python - 为什么 list(print(x.upper(), end =' ' ) for x in 'spam' ) 得到一个 [None, None, None, None] 列表?

MySQL 多对多 (n :n): Setting 1 entry as main entry

django - 如何统计Django中多个用户的相关对象?

Django ORM原始删除查询不删除记录