don*_*llo 7 python postgresql sqlalchemy psycopg2 vacuum
好吧,这个问题几乎总结了它.我的数据库活动非常密集,我想以编程方式发布真空分析.但是我收到一条错误,指出查询无法在事务中执行.还有其他方法吗?
Gle*_*ard 11
这是Python DB-API中的一个缺陷:它为您启动一个事务.它不应该这样做; 是否以及何时开始交易应由程序员决定.像这样的低级核心API不应该照顾开发人员并做一些事情,比如在我们的背后开始交易.我们是大男孩 - 我们可以自己开始交易,谢谢.
使用psycopg2,您可以使用API扩展禁用此不幸行为:call connection.autocommit = True.遗憾的是,没有标准的API,因此您必须依赖非标准扩展来发出必须在事务之外执行的命令.
没有语言没有它的疣,这是Python的一个.我之前也被这种感觉所困扰.
您可以autocommit使用SQLAlchemy的raw_connection(将为您提供“原始的” psycopg2连接)打开Postgres 模式:
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2984 次 |
| 最近记录: |