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(), то создание модели работает нормально.
Есть идеи, в чем может быть проблема?