【发布时间】:2018-05-19 09:29:47
【问题描述】:
有没有办法在创建会话对象时,可以将其配置为定期执行 flush()?
我需要这个功能的原因是因为在会话范围内,它正在内存中运行一个非短后台作业。我希望程序使用 flush() 定期更新与 DB 的作业进度,以便我的客户端可以从 DB 查询进度。
目前,我的解决方案是使用另一个定期执行 session.flush() 的线程。
谢谢!
【问题讨论】:
-
您应该致电
commit()让其他客户看到您的更改;flush()也有效的事实是您使用的隔离级别的副作用。为了实现您的目标,每当您想报告工作进度时,请更新您的模型并提交;不需要单独的线程。 -
感谢您提出
commit()。经过一些试验,我发现我的会话中的事务级别是 REPEATABLE READ,但我的客户端仍然可以读取未提交的更新。你知道为什么会这样吗? -
您要么打开了
autoflush并正在触发自动刷新,要么打开了autocommit。
标签: python session sqlalchemy flush