我有一个 Flask 应用程序,它使用 Flask-Sqlalchemy 来处理与数据库的连接。我在应用程序跟踪中注意到的一件事是,在应用程序中的每个请求的末尾,都有一个
postgres.connection.rollback
。我的代码中没有任何地方执行回滚,而是在每个请求结束时对“每个”请求执行回滚。基本上,我看到所有请求如下:
-> Save record to DB
->
postgres.connection.commit
-> postgres.connection.rollback
我已经浏览了Flask-Sqlalchemy文档
rollback
方法。此行为记录在
返回时重置池包含“返回时重置”行为,当连接返回池时,该行为将调用 DBAPI 连接的 rollback() 方法。这样,任何现有的事务状态都会从连接中删除,其中不仅包括未提交的数据,还包括表锁和行锁。对于大多数 DBAPI,对 rollback() 的调用成本低廉,并且如果 DBAPI 已经完成事务,则该方法应该是无操作。
可以通过将
pool_reset_on_return=None
传递给
create_engine
来禁用默认行为:engine = create_engine(url, pool_reset_on_return=None)
可以通过禁用默认行为并在reset