针对每个请求使用 Flask-Sqlalchemy 进行额外回滚

问题描述 投票:0回答:1

我有一个 Flask 应用程序,它使用 Flask-Sqlalchemy 来处理与数据库的连接。我在应用程序跟踪中注意到的一件事是,在应用程序中的每个请求的末尾,都有一个

postgres.connection.rollback
。我的代码中没有任何地方执行回滚,而是在每个请求结束时对“每个”请求执行回滚。基本上,我看到所有请求如下: ->

Save record to DB

->

postgres.connection.commit
->
postgres.connection.rollback
我已经浏览了

Flask-Sqlalchemy文档

和源代码,但我似乎无法弄清楚无关的回滚发生在哪里。

postgresql flask sqlalchemy flask-sqlalchemy
1个回答
0
投票
rollback

方法。此行为记录在

返回时重置

池包含“返回时重置”行为,当连接返回池时,该行为将调用 DBAPI 连接的 rollback() 方法。这样,任何现有的事务状态都会从连接中删除,其中不仅包括未提交的数据,还包括表锁和行锁。对于大多数 DBAPI,对 rollback() 的调用成本低廉,并且如果 DBAPI 已经完成事务,则该方法应该是无操作。

可以通过将
pool_reset_on_return=None

传递给

create_engine
来禁用默认行为:
engine = create_engine(url, pool_reset_on_return=None)

可以通过禁用默认行为并在 
reset

池事件处理程序中提供替代行为来自定义此行为。

© www.soinside.com 2019 - 2024. All rights reserved.