Postgresql 如何在SQLAlchemy中进行手动提交?
我试图通过SQLAlchemy运行Postgresql 如何在SQLAlchemy中进行手动提交?,postgresql,pandas,sqlalchemy,psycopg2,Postgresql,Pandas,Sqlalchemy,Psycopg2,我试图通过SQLAlchemy运行VACUUM,但它不起作用,因为它位于事务块中 with engine.begin() as connection: S = orm.session.sessionmaker()() pd.io.sql.execute('DROP TABLE IF EXISTS %s' % table_name, connection) df.to_sql(table_name, connection, chunksize=1000) S.com
VACUUM
,但它不起作用,因为它位于事务块中
with engine.begin() as connection:
S = orm.session.sessionmaker()()
pd.io.sql.execute('DROP TABLE IF EXISTS %s' % table_name, connection)
df.to_sql(table_name, connection, chunksize=1000)
S.commit()
S.close()
engine.execute('VACUUM')
如您所见,我确实手动提交并关闭了会话,但仍然存在一个异常:
File "../__init__.py", line 115, in write_file engine.execute('VACUUM')
...
cursor.execute(statement, parameters)
sqlalchemy.exc.InternalError: (psycopg2.InternalError) VACUUM cannot run inside a transaction block
[SQL: 'VACUUM']
我尝试了各种方法,阅读了其他案例和建议,但每个人似乎都推荐autocommit
,我在本例中无法使用
如何使
VACUUM
在这里工作?据我所知,pandas将使用给定的引擎创建自己的会话,并在执行给定的命令后提交和关闭会话。它会干扰你的手动提交吗?@Primer可能会。我看到有两个连接对象,但在熊猫的连接对象中找不到提交句柄。@VaoTsun该问题的答案再次建议自动提交。但我要么放弃,要么什么都不要。如果数据中有错误,我希望回滚而不掉落。据我所知,使用自动提交是不可能的,因为drop
将立即提交。vacuum
不能成为事务的一部分。所以您可以打开事务,执行drop和commit,然后将autocommit设置为true,在autocommit中执行真空,然后再次将autocommit设置为false-对吗?。据我所知,熊猫将使用给定的引擎创建自己的会话,执行给定的命令后,熊猫将提交并关闭该会话。它会干扰你的手动提交吗?@Primer可能会。我看到有两个连接对象,但在熊猫的连接对象中找不到提交句柄。@VaoTsun该问题的答案再次建议自动提交。但我要么放弃,要么什么都不要。如果数据中有错误,我希望回滚而不掉落。据我所知,使用自动提交是不可能的,因为drop
将立即提交。vacuum
不能成为事务的一部分。所以您可以打开事务,执行drop和commit,然后将autocommit设置为true,在autocommit中执行真空,然后再次将autocommit设置为false-对吗?。。