Flask Sqlalchemy иногда откатывается после фиксации ⇐ Python
Flask Sqlalchemy иногда откатывается после фиксации
У меня есть таблица «Заказы», в которой есть поле «комментарии», которое представляет собой массив json объектов json. например [{"timestamp":"timestamp_value","message":"message_value"}] Вот функция конечной точки колбы, которую я использую для добавления комментария
класс CommentOnOrderService: """ Содержит функцию, которая позволит комментировать и исправлять любые записи в таблице заказов. """ def comment_on_order(self, параметры): двигатель = db.get_engine() эконом = двигатель.connect() сеанс = сеанс (bind = econ) конн = сеанс.соединение() номер_заказа = params.get("номер_заказа", "") отметка времени = params.get("метка времени", "") если временная метка: метка времени = datetime.fromisoformat(метка времени) статус = params.get("статус", "") комментарии = params.get("комментарии", "") comment_to = params.get("comment_to", "") comment_from = params.get("comment_from", "") truncate = params.get("truncate", "") == "true" пытаться: строка: Статус заказа если временная метка: строка = session.query(OrderStatus).filter( и_( OrderStatus.order_number == order_number, OrderStatus.timestamp == временная метка, ) ).первый() еще: строка = ( session.query(OrderStatus).filter(OrderStatus.order_number == order_number) .order_by(desc("метка времени")) .первый() ) если не строка: поднять исключение («Запись не найдена») если статус: строка.статус = статус если комментарии: если обрезать: строка.комментарии = [ { «метка времени»: datetime.now().isoformat(), "comment_to": comment_to, "комментарий_от": комментарий_от, "comment_body": комментарии, } ] еще: превданные = row.comments row.comments = предыдущие данные + [ { «метка времени»: datetime.now().isoformat(), "comment_to": comment_to, "комментарий_от": комментарий_от, "comment_body": комментарии, } ] Элиф обрезать: строка.комментарии = [] с помощью session.begin_nested(): сеанс.add(строка) сеанс.коммит() econ.execute("СОВЕРШИТЬ") вернуть ответ.успех( {"message": "Заказ успешно прокомментирован", "params": params} ) кроме Исключения как исключения: вернуть Resp.error([str(исключение)]) окончательно: сеанс.закрытие()
В большинстве случаев комментарий добавляется и правильно отражается в пользовательском интерфейсе, который я создаю. Однако иногда, когда он добавляется, он отображается в пользовательском интерфейсе, а затем случайным образом откатывается.
Я пробовал использовать mutable_dict и некоторые другие методы, но безрезультатно и могу понять, почему происходит откат. Может кто-нибудь помочь мне расшифровать это?
У меня есть таблица «Заказы», в которой есть поле «комментарии», которое представляет собой массив json объектов json. например [{"timestamp":"timestamp_value","message":"message_value"}] Вот функция конечной точки колбы, которую я использую для добавления комментария
класс CommentOnOrderService: """ Содержит функцию, которая позволит комментировать и исправлять любые записи в таблице заказов. """ def comment_on_order(self, параметры): двигатель = db.get_engine() эконом = двигатель.connect() сеанс = сеанс (bind = econ) конн = сеанс.соединение() номер_заказа = params.get("номер_заказа", "") отметка времени = params.get("метка времени", "") если временная метка: метка времени = datetime.fromisoformat(метка времени) статус = params.get("статус", "") комментарии = params.get("комментарии", "") comment_to = params.get("comment_to", "") comment_from = params.get("comment_from", "") truncate = params.get("truncate", "") == "true" пытаться: строка: Статус заказа если временная метка: строка = session.query(OrderStatus).filter( и_( OrderStatus.order_number == order_number, OrderStatus.timestamp == временная метка, ) ).первый() еще: строка = ( session.query(OrderStatus).filter(OrderStatus.order_number == order_number) .order_by(desc("метка времени")) .первый() ) если не строка: поднять исключение («Запись не найдена») если статус: строка.статус = статус если комментарии: если обрезать: строка.комментарии = [ { «метка времени»: datetime.now().isoformat(), "comment_to": comment_to, "комментарий_от": комментарий_от, "comment_body": комментарии, } ] еще: превданные = row.comments row.comments = предыдущие данные + [ { «метка времени»: datetime.now().isoformat(), "comment_to": comment_to, "комментарий_от": комментарий_от, "comment_body": комментарии, } ] Элиф обрезать: строка.комментарии = [] с помощью session.begin_nested(): сеанс.add(строка) сеанс.коммит() econ.execute("СОВЕРШИТЬ") вернуть ответ.успех( {"message": "Заказ успешно прокомментирован", "params": params} ) кроме Исключения как исключения: вернуть Resp.error([str(исключение)]) окончательно: сеанс.закрытие()
В большинстве случаев комментарий добавляется и правильно отражается в пользовательском интерфейсе, который я создаю. Однако иногда, когда он добавляется, он отображается в пользовательском интерфейсе, а затем случайным образом откатывается.
Я пробовал использовать mutable_dict и некоторые другие методы, но безрезультатно и могу понять, почему происходит откат. Может кто-нибудь помочь мне расшифровать это?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Автономный JTA с Narayana 7, Spring 6 и Hibernate 6 – вся транзакция не откатывается
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-