我在连接到postgres数据库的项目中使用Elixir。我想在我连接的数据库上运行以下查询,但我不确定如何做,因为我对Elixir和SQLAlchemy相当陌生。任何人都知道吗?用Elixir执行sql查询
VACUUM FULL ANALYZE table
更新
的错误是: “UnboundExecutionError:找不到上SQL表达或该会话配置的绑定”。和之前发布的session.close()相同的结果。我没有尝试做metadata.bind.execute(),并为一个简单的选择工作。但是对于VACUUM,它说 - “InternalError:(InternalError)VACUUM不能在事务块内部运行”,所以现在我试图找出如何关闭它。
更新2
我可以得到查询来执行,但我仍然得到同样的错误 - 甚至当我创建一个新的会话,并关闭前一个。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# ... insert stuff
old_session.commit()
old_session.close()
new_sess = sessionmaker(autocommit=True)
new_sess.configure(bind=create_engine('postgres://user:[email protected]/db', echo=True))
sess = new_sess()
sess.execute('VACUUM FULL ANALYZE table')
sess.close()
和输出我得到的是
2009-12-10 10:00:16,769 INFO sqlalchemy.engine.base.Engine.0x...05ac VACUUM FULL ANALYZE table
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac {}
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac ROLLBACK
finishing failed run, (InternalError) VACUUM cannot run inside a transaction block
'VACUUM FULL ANALYZE table' {}
更新3
感谢大家谁回答。
我无法找到我想要的解决方案,但我认为我只是想用这里描述的那个
PostgreSQL - how to run VACUUM from code outside transaction block?。这不是理想的,但它的工作原理。
我试过了,但我得到了一个UnboundExecutionError。 session是sqlalchemy.orm.scoping.ScopedSession的一个实例,当我为其他查询调用session.commit()时,它就可以工作。如果它在提交之前或之后有关系吗? – mozillalives 2009-12-09 19:02:03
您可以在执行语句之前尝试执行session.close()。此外,错误希望带有追溯,这是什么意思? – 2009-12-09 19:45:44
“UnboundExecutionError:无法找到在SQL表达式或此会话上配置的绑定”。和之前发布的session.close()相同的结果。我没有尝试做metadata.bind.execute(),并为一个简单的选择工作。但是对于VACUUM,它说 - “InternalError:(InternalError)VACUUM无法在事务块内部运行”,所以现在我试图找出如何关闭它。 – mozillalives 2009-12-09 20:35:21