ディスク上の Sqlite3 データベースで Pony ORM バージョン 0.7 を使用していますが、この問題が発生しています。
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)
また、select から制約を外すとtask.order_id == 2
問題が発生しなくなるので、トランザクションが開始されてから変更されたフィールドに基づいてクエリを実行することと関係があると思いますが、理由はわかりませんエラーメッセージは、別のトランザクションによって変更されたことを示していますdb.execute
(生のSQLであるために別のトランザクションで実行されている可能性がある場合を除きますか?)
私はすでにこの同様の質問を見てきましたが、問題は異なっていました (ポニー ORM レポート レコードは「現在のトランザクションの外部で更新されました」が、他のトランザクションはありません) およびこのドキュメント ( https://docs.ponyorm.com/ transactions.html ) しかし、どちらも私の問題を解決しませんでした。
ここで何が起こっているのでしょうか?