Управление подключением к базе данных при использовании только Django ORM - PullRequest
0 голосов
/ 23 января 2012

Я использую слой Django ORM вне Django. Проект представляет собой веб-приложение, использующее встроенный фреймворк cusotm.

Теперь у меня не было проблем с настройкой Django ORM для автономной работы, но я немного беспокоюсь об управлении соединением. Я прочитал Используя только часть базы данных Django здесь, в SO, и это правда, что Django выполняет некоторую специальную обработку соединений в начале и конце каждого запроса. От django / db / __ init __. Py :

# Register an event that closes the database connection
# when a Django request is finished.
def close_connection(**kwargs):
    for conn in connections.all():
        conn.close()
signals.request_finished.connect(close_connection)

# Register an event that resets connection.queries
# when a Django request is started.
def reset_queries(**kwargs):
    for conn in connections.all():
        conn.queries = []
signals.request_started.connect(reset_queries)

# Register an event that rolls back the connections
# when a Django request has an exception.
def _rollback_on_exception(**kwargs):
    from django.db import transaction
    for conn in connections:
        try:
            transaction.rollback_unless_managed(using=conn)
        except DatabaseError:
            pass
signals.got_request_exception.connect(_rollback_on_exception)

С какими проблемами я могу столкнуться, если пропущу это управление соединением? (У меня нет возможности легко подключить эти сигналы к моей структуре)

1 Ответ

1 голос
/ 23 января 2012

Это зависит от вашего варианта использования.Каждая из этих функций делает что-то конкретное, что может или не может повлиять на вас.

Если это длительный процесс и у вас включен DEBUG, вам нужно будет сбросить запросы или он сохранит всезапросы, которые вы выполняете в памяти.

Если вы порождаете много потоков, подключаетесь к БД по одному разу в начале каждого потока, а затем оставляете потоки запущенными, вы также захотите закрыть соединения, когдавы закончили использовать БД, или вы можете достичь предела подключения вашей БД.

Вам почти наверняка не нужно _rollback_on_exception - я предполагаю, что вы настроили предполагаемое поведение транзакции в соответствующем коде.

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