Я использую Pony ORM версии 0.7 с базой данных Sqlite3 на диске и сталкиваюсь с этой проблемой: я выполняю выбор, затем обновление, а затем выберите, а затем еще одно обновление, и появляется сообщение об ошибке вPonyORM (Python) «Значение обновлялось за пределами текущей транзакции», но это не было
pony.orm.core.UnrepeatableReadError: Value of Task.order_id for
Task[23654] was updated outside of current transaction (was: 1, now: 2)
Я свели задачу к минимальному набору команд, который вызывает проблему (т.е. удаление ничего вызывает проблему не произойти) :
@db_session
def test_method():
tasks = list(map(Task.to_dict, Task.select()))
db.execute("UPDATE Task SET order_id=order_id*2")
task_to_move = select(task for task in Task if task.order_id == 2).first()
task_to_move.order_id = 1
test_method()
Для полноты определения здесь дается определение Task
:
class Task(db.Entity):
text = Required(unicode)
heading = Required(int)
create_timestamp = Required(datetime)
done_timestamp = Optional(datetime)
order_id = Required(int)
Кроме того, если удалить ограничение, task.order_id == 2
от моего выбора, проблема больше не возникает, поэтому я предполагаю, что проблема имеет что-то делать с запрашивая на основе поля, которое было изменено с момента сделки , но я не знаю, почему сообщение об ошибке сообщает мне, что оно было изменено другой транзакцией (если, может быть, db.execute
выполняется в отдельной транзакции, потому что это необработанный SQL?)
Я уже посмотрел по этому аналогичному вопросу, но проблема была другой (Pony ORM reports record "was updated outside of current transaction" while there is not other transaction) и в этой документации (https://docs.ponyorm.com/transactions.html), но не решили мою p РОБЛЕМА.
Любые идеи, что может быть здесь?