Django TransactionManagementError

В моем приложении мне нужно обновить соединение с базой данных django в случае, если оно упало во время длительной блокировки (не связанной с базой данных) задачи.

В целом это работает, но я обнаружил, что создание новой модели непосредственно после повторного подключения приводит к ошибке. Мой код:

from django.db import connection
from django.db.utils import OperationalError
import time

connection.close()

db_conn = False
while not db_conn:
    try:
        connection.ensure_connection()
        db_conn = True
    except OperationalError:
        print('Database unavailable, waiting 1 second...')
        time.sleep(1)

print('Database available')

proc_info = models.ProcessingInfo()
proc_info.processing_name = "xxx"
    
proc_info.in_progress = False

proc_info.save()

Это дает следующую ошибку:

File "/usr/local/lib/python3.7/dist-packages/django/db/backends/base/base.py", line 448, in validate_no_broken_transaction
    "An error occurred in the current transaction. You can't "
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

Если я не вызываю connection.close(), а затем ensure_connection(), то создание модели работает нормально.

Есть идеи, в чем может быть проблема?

Вернуться на верх