我正在构建一个使用 2 db 的 turbogears 应用程序 - 第二个 - 我指的是 mssql db - 由另一个应用程序使用(不是我的 - 我的应用程序实际上是解决问题的黑客 - 所以我可以'不控制其他应用程序或 mssql db 设置)
我正在使用 sqlalchemy(通过 turbogears)写入特定的数据库表:
DBSession.add(object)
DBSession.flush()
数据被写入 db - 但是 turbogears 应用程序在 db 上保留了某种句柄,因此使用该 db 表的主要应用程序可以从中读取但不能更改它。直到我停止 turbogears 应用程序,然后一切正常。我试着打电话:
DBSession.close()
但随后数据被神奇地从数据库中删除 - 可能是事务回滚。我也试着打电话:
transaction.doom()
具有类似的效果(或根本没有效果,我不确定)
我在 turbogears 中读到事务管理器(我猜是 repoze.tm)处理提交,但我不知道 - 什么时候调用它?我该如何控制它?尤其是当函数完成它的预定运行时如何删除数据库句柄(我不能只是结束脚本,它是一个 cron 作业,每小时运行一次)。tg2.1 文档对此主题非常不清楚
我还阅读了我应该覆盖 commit_veto 的地方 - 但不明白 - 我应该如何做以及在哪里做?在我的应用程序中我应该在哪里调用 transaction.abort() .doom() 或其他什么?
我也使用事务钩子尝试了相同的功能,但没有成功调用钩子
谢谢你的帮助。
版本数据:
- 涡轮齿轮箱 2.1.3
- sqlalchemy 0.7
- 微软SQL 2005
- 使用 pyodbc 连接到 mssql