SELECT查询后,使SQLAlchemy COMMIT代替ROLLBACK

Erw*_*ter 4 python postgresql transactions sqlalchemy commit

我正在与合作伙伴一起开发应用程序。我执行数据库部分(PostgreSQL),我的合作伙伴使用python使用SQLAlchemy在Web服务器上实现应用程序。我们大量使用存储过程。一SELECT对在数据库日志那些看起来像这样的一个查询:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

SELECT col_a, col_b FROM f_stored_proc(E'myvalue');

ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

在存储过程中,我将某些输入写入日志表。通过SELECTSQLAlchemy 查询的应用程序仅看到SELECT语句,并坚持使用ROLLBACK。记录失败。我需要它COMMIT代替。我的伙伴声称没有简单的方法,我们将不得不完全删除SQLAlchemy。我认为他一定是错的,但是缺乏主张否则的知识。

有没有一种简单的方法可以COMMIT代替SQLAlchemy ROLLBACK
是什么让我无法执行trans.commit()?我需要为此设置autoflush=False吗?

我已经扫描了常见问题解答,但没有找到答案。
搜索SO揭示了一些相关的问题,例如此处此处,但我不清楚。
也许这个食谱会起作用?

DNS*_*DNS 5

如果您使用的是SQLAlchemy的连接池,那么您看到的可能是使用后关闭连接时发生的自动回滚。显然有必要确保下次将连接从池中拉出时该连接是“干净的”。请参阅此页面以获取更多信息;在顶部附近搜索“合并机制”。

从我记得的情况(距离我上一次使用此方法已经有两年了),将隔离级别更改为自动提交将无法解决问题,因为它不会将SELECT语句视为需要提交。

您确实只想将该语句包装在事务中。我不知道您的代码的结构,但是您应该只能够使用SQLAlchemy的connection.begin和connection.commit。您甚至可以将BEGIN和COMMIT作为任意SQL执行。