好吧,这个问题几乎总结了它。我的数据库活动非常需要更新,我想以编程方式发出真空分析。但是,我收到一条错误消息,指出无法在事务中执行查询。还有其他方法吗?
问问题
4788 次
2 回答
13
这是 Python DB-API 的一个缺陷:它会为您启动一个事务。它不应该那样做;是否以及何时开始事务应由程序员决定。像这样的低级核心 API 不应该照看开发人员并做诸如在我们背后启动交易之类的事情。我们是大男孩——我们可以自己开始交易,谢谢。
使用 psycopg2,您可以使用 API 扩展禁用这种不幸的行为: run connection.autocommit = True
。不幸的是,没有标准的 API,因此您必须依赖非标准扩展来发出必须在事务之外执行的命令。
没有一种语言是没有缺点的,这是 Python 的一种。我以前也被这个咬过。
于 2010-10-14T10:04:18.270 回答
11
autocommit
您可以使用 SQLAlchemy 的raw_connection打开 Postgres模式(这将为您提供“原始” psycopg2 连接):
import sqlalchemy
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
engine = sqlalchemy.create_engine(url)
connection = engine.raw_connection()
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
cursor.execute("VACUUM ANALYSE table_name")
于 2017-01-28T11:34:00.283 回答