sqlalchemy会话无法识别mysql数据库中的更改(由其他进程完成)

时间:2010-08-23 17:12:45

标签: python mysql database sqlalchemy

申请包括:

  • 主要进程(python + sqlalchemy)那个 定期检查数据库(睡眠最多 当时)
  • 写入db
  • 的子进程
  • 写入db
  • 的Web应用程序

问题是主进程会话似乎没有注册在该会话之外完成的db中的更改。如何确保它呢? (截至目前,我正在关闭并在每次进程唤醒并进行检查时重新打开会话。)

1 个答案:

答案 0 :(得分:1)

  

每次进程醒来并进行检查时,我都会关闭并重新打开会话

SQLAlchemy不会像这样工作。会话中会跟踪更改。

someobj = Session.query(SomeClass).first()

someobj放入Session内部缓存中。执行someobj.attr = val时,它会标记与someobj关联的会话中的更改。

因此,如果您从某个session1中提取了object1,然后关闭了session1,则object1不再与任何会话关联,也不会被跟踪。

最佳解决方案是在改变时立即提交:

object1 = newsession.add(object1)
newsession.commit()

否则,您必须管理自己的对象缓存,并在每次检查时合并所有对象。