Как создать новое соединение с базой данных в Django - PullRequest
0 голосов
/ 24 июня 2019

Мне нужно создать новое соединение с базой данных (сеанс), чтобы избежать непредвиденного принятия из процедуры MySql в моей транзакции django.Как настроить его в 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 Ответ

2 голосов
/ 24 июня 2019

Если вы посмотрите на модуль 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, вероятно, считаются внутренними и могут изменяться без предварительного уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...