gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:49:34 25 4
gpt4 key购买 nike

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

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

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

ROLLBACK;

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

有没有简单的方法让 SQLAlchemy COMMIT 而不是 ROLLBACK
是什么阻止我执行 trans.commit()?我需要为此设置 autoflush=False 吗?

我已经扫描了 FAQ , 但在那里没有找到答案。
搜索 SO 揭示了一些相关问题,例如 herehere ,但我不清楚。
也许这个recipe有用吗?

最佳答案

如果您正在使用 SQLAlchemy 的连接池,那么您看到的可能是连接在使用后关闭时发生的自动回滚。显然有必要保证连接在下次从池中拉出时是“干净的”。参见 this page了解更多信息;在顶部附近搜索“池化机制”。

根据我的内存(自从我上次使用它已经有几年了)将隔离级别更改为自动提交不会解决问题,因为它不会将 SELECT 语句视为需要提交。

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

关于python - 在 SELECT 查询之后使 SQLAlchemy COMMIT 而不是 ROLLBACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com