如何在Django中创建新的数据库连接

时间:2019-06-24 08:59:17

标签: python mysql django transactions

我需要创建一个新的数据库连接(会话),以避免在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

有人知道如何使用自定义数据库连接来调用该过程吗?

1 个答案:

答案 0 :(得分:2)

如果您查看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可能被认为是内部的,并且可能会更改,恕不另行通知。