1

我想知道当另一个进程更新同一对象的某些属性时,SQLAlchemy 是否可以支持从数据库即时加载对象的当前状态。

我想提一下,我正在从 SQLObject 迁移到 SQLAlchemy。目前,使用 SQLObject,我有一张表,例如:

class MyConfiguration(SQLObject):
    class sqlmeta:
        cacheValues = False
    attr1 = StringCol(default='')
    attr2 = IntCol(default=0)

如您所知,此 cacheValues=False 设置会立即将属性更新刷新到磁盘:

global my_config
my_config = MyConfiguration()
my_config.attr1 = 'some value'

即时 attr1 设置为“某个值”,该值可用于使用相同对象 my_config 的另一个进程。

我已经阅读了 SQLAlchemy 的 ORM 和 Core 的基本教程,据我所知,我可以通过使用 session.merge() 来实现这一点,因为除非我添加或合并,否则 SQLAlchemy 中的“my_config”状态不会变为挂起/脏,并且 autoflush=True,后续查询将重新读取表中的行。

我认为的另一个选择是我可以覆盖 MyConfiguration 中的setattr以立即刷新对实例的更改。但是,我不喜欢这样,因为这很难看,我想尽可能多地使用 SQLAlchemy 的功能,而不是破解一些东西。

所以我试图在 SQLAlchemy 中找到这个 SQLObject 的特性的完全匹配。这可能吗?

在此先感谢您的帮助。

4

0 回答 0