在 SELECT 查询后使 SQLAlchemy COMMIT 而不是 ROLLBACK

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

我正在与合作伙伴一起开发一个应用程序。我在 PostgreSQL 中完成数据库部分,我的合作伙伴使用 SQLAlchemy 在 Web 服务器上使用 Python 实现该应用程序。我们大量使用服务器端功能。对其中之一的

SELECT
查询在数据库日志中如下所示:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

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

ROLLBACK;

在函数中,我将某些输入写入日志表。应用程序通过

SELECT
进行查询,SQLAlchemy 只看到
SELECT
语句并坚持使用
ROLLBACK
。记录失败。我需要它来代替。我的合作伙伴声称没有简单的方法,我们必须完全删除 SQLAlchemy。我认为他一定是错的,但缺乏知识来反驳。
有没有一种简单的方法可以让 SQLAlchemy 

COMMIT

而不是

COMMIT
是什么让我无法执行
ROLLBACK
?我需要为此设置
trans.commit()
吗?
我已扫描了

FAQ

,但没有找到答案。 搜索SO发现了一些相关问题,例如here
here,但我不清楚。 也许这个食谱
会起作用?

python postgresql transactions sqlalchemy commit
1个回答
10
投票
此页

了解更多信息;在顶部附近搜索“池机制”。 据我所知(自从我上次使用此方法以来已经有几年了)将隔离级别更改为自动提交并不能解决问题,因为它不会将 SELECT 语句视为需要提交。

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

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