Задача Django по созданию объектов в базе данных систематически срывалась на первой записи
Я использую Django (2.2.5), Docker, celery и базу данных Postgresql. Я написал задачу celery, которая сначала запрашивает базу данных, создает датафрейм с результатами запроса и обновляет_или_создает объекты в базах данных на основе этого датафрейма
код упрощенный
# load queries definition
queries = dcf_queries_definitions() # this line query the database
# print(queries)
if not queries.empty:
for index, row in queries.iterrows():
# multiple call to api of another app to look for missing data
# return **df** dataframe that will be used to create objects in database
records = df.to_dict(orient='records')
for record in records:
try:
DataCorrectionForm.objects.create(
dcf_ide=record['dcf_ide'],
category=record['category'],
crf=record['crf'],
crf_ide=record['crf_ide'],
patient=record['patient'],
record_date=record['record_date'],
field_name=record['field_name'],
field_label=record['field_label'],
message=record['message'],
field_value=record['field_value'],
dcf_status=record['dcf_status'],
query_id=record['query_id'],
deactivated=record['deactivated'],
comments=record['comments']
)
except Exception as e:
print(record)
print('Exception raised when trying to update object',e)
continue
Но у меня есть OperationalError, который систематически поднимается на первых объектах, которые создаются или обновляются . Сообщение не очень понятно для меня.
OperationalError('сервер закрыл соединение неожиданно\n\tThis вероятно, означает, что сервер завершил работу ненормально\n\tbe до или во время обработки запроса.\n')
Я контролирую данные, которые пытаюсь вставить в модель, и нет никаких проблем. Если я загружаю те же данные из файла csv для вставки в мою базу данных, проблем нет.
Я подозреваю проблему с транзакцией между запросом к базе данных и попыткой вставить в базу данных в одной и той же задаче.
Если я пытаюсь создать объект методом create (не update_or_create) и фиксирую ошибку, то ошибка имеет вид connection already closed
.
Я изначально открыл пост здесь, но ответа не получил, но теперь анализ вопроса совсем другой.
Буду признателен за помощь и совет.