sqlalchemy&sqlmodel的commit后数据丢失问题
描述 print(user) # name=user,age=18, ... session.commit() print(user) # empty 原因 sqlalchemy为了保持session内的数据同步,默认了expire_on_commit为True,它表现在: # 查询 b = session.query(User).filter(User.id==2).first() # 更改数据 b.name = "user_b" session.add(b) session.flush() session.commit() # commit后再次访问,其实是重新进行了select操作 b.name # user_b expire_on_commit可以用来更改 SQLAlchemy 的对象刷新机制,默认值为True即在session调用commit之后会主动将同一个session在commit之前查询得到的 ORM 对象的_sa_instance_state.expire属性设置为Flase,再次读取该对象属性时将重载这个对象,方法是重新调用之前的查询语句。 ...