Python 脏属性会影响session.query吗
当我创建sqlalchemy会话并更改某些模型的某些属性时,在会话上进行任何Python 脏属性会影响session.query吗,python,sqlalchemy,Python,Sqlalchemy,当我创建sqlalchemy会话并更改某些模型的某些属性时,在会话上进行任何flush或commit之前进行查询时,这些更改是否适用 我找不到任何适当的文件来说明这个状态 具体来说,我是在尝试在模型创建/更新的事件侦听器中验证DB不变量时遇到这个问题的。我知道我在会话中有脏模型。脏,除了任何标准的会话之外,我是否需要手动查询它们。query()我制作的?对于“脏属性会影响会话。查询”的简短回答是否,如中所述: 但是,它不做任何类型的查询缓存。这意味着,如果你说session.query(Foo)
flush
或commit
之前进行查询时,这些更改是否适用
我找不到任何适当的文件来说明这个状态
具体来说,我是在尝试在模型创建/更新的事件侦听器中验证DB不变量时遇到这个问题的。我知道我在会话中有脏模型。脏
,除了任何标准的会话之外,我是否需要手动查询它们。query()
我制作的?对于“脏属性会影响会话。查询
”的简短回答是否,如中所述:
但是,它不做任何类型的查询缓存。这意味着,如果你说session.query(Foo).filter\u by(name='bar')
,即使Foo(name='bar')
就在身份映射中,会话也不知道这一点。它必须向数据库发出SQL,将行取回,然后当它看到行中的主键时,它可以查看本地标识映射并看到对象已经存在
实际上,它并不是那么简单,因为在默认配置中,SQLAlchemy会定期将会话中保存的更改刷新到数据库中。这被称为,它确保发送到数据库的查询在会话中保持时观察状态
其中还指出
它提供获取查询
对象的入口点,该对象使用会话
对象的当前数据库连接将查询发送到数据库
因此,如果您已禁用自动刷新,或处于无法进行刷新的环境中,则必须手动处理脏对象。我认为这与此密切相关:,但Bauble特定部分除外。