Python 脏属性会影响session.query吗

Python 脏属性会影响session.query吗,python,sqlalchemy,Python,Sqlalchemy,当我创建sqlalchemy会话并更改某些模型的某些属性时,在会话上进行任何flush或commit之前进行查询时,这些更改是否适用 我找不到任何适当的文件来说明这个状态 具体来说,我是在尝试在模型创建/更新的事件侦听器中验证DB不变量时遇到这个问题的。我知道我在会话中有脏模型。脏,除了任何标准的会话之外,我是否需要手动查询它们。query()我制作的?对于“脏属性会影响会话。查询”的简短回答是否,如中所述: 但是,它不做任何类型的查询缓存。这意味着,如果你说session.query(Foo)

当我创建sqlalchemy会话并更改某些模型的某些属性时,在会话上进行任何
flush
commit
之前进行
查询时,这些更改是否适用

我找不到任何适当的文件来说明这个状态

具体来说,我是在尝试在模型创建/更新的事件侦听器中验证DB不变量时遇到这个问题的。我知道我在
会话中有脏模型。脏
,除了任何标准的
会话之外,我是否需要手动查询它们。query()
我制作的?

对于“脏属性会影响
会话。查询
”的简短回答是否,如中所述:

但是,它不做任何类型的查询缓存。这意味着,如果你说
session.query(Foo).filter\u by(name='bar')
,即使
Foo(name='bar')
就在身份映射中,会话也不知道这一点。它必须向数据库发出SQL,将行取回,然后当它看到行中的主键时,它可以查看本地标识映射并看到对象已经存在

实际上,它并不是那么简单,因为在默认配置中,SQLAlchemy会定期将
会话中保存的更改刷新到数据库中。这被称为,它确保发送到数据库的查询在会话中保持时观察状态

其中还指出

它提供获取
查询
对象的入口点,该对象使用
会话
对象的当前数据库连接将查询发送到数据库


因此,如果您已禁用自动刷新,或处于无法进行刷新的环境中,则必须手动处理脏对象。

我认为这与此密切相关:,但Bauble特定部分除外。