我正在构建一个使用2 db的涡轮齿轮应用程序--第二个--我指的是mssql db --由另一个应用程序(不是我的应用程序)使用的--我的应用程序实际上是解决问题的黑客,所以我无法控制另一个应用程序或mssql设置)。
我使用sqlalchemy (通过涡轮齿轮)编写一个特定的db表,使用:
DBSession.add(object)
DBSession.flush()数据被写入到db --但是涡轮齿轮应用程序在db上保留了某种句柄,所以使用该db表的主应用程序可以从中读取数据,但不能更改它。直到我停止涡轮齿轮的应用然后一切都正常。我试着打电话:
DBSession.close()但是,数据却神奇地从db中删除--可能是事务回滚。我还试着打电话:
transaction.doom()有相似的效果(或者根本没有效果,我不确定)
我在涡轮齿轮中读到,事务管理器(我猜是repoze.tm)处理提交,但我不知道什么时候调用它?我该怎么控制它?特别是如何在函数完成时删除db句柄(我不能仅仅结束脚本,它是cron作业,每小时运行一次)。关于这个问题,tg2.1文档非常不清楚。
我还读到了一些我应该覆盖commit_veto的地方--但我不明白--我应该怎么做,在哪里?在我的应用程序中,我应该在哪里调用transaction.abort()、.doom()或其他什么东西?
我也使用事务钩子尝试了相同的函数,但是没有成功地调用钩子。
谢谢你的帮助。
版本数据:
2.1.3
发布于 2011-12-05 15:39:37
DBSession.flush()执行SQL,但不提交。您必须调用DBSession.commit()才能完成事务(在本例中不需要显式调用flush(),commit()将执行此操作)。在commit() SQLAlchemy启动新事务之后,这应该不是问题,因为数据通常只有在执行某些SQL语句时才会被锁定。
https://stackoverflow.com/questions/8369293
复制相似问题