代码之家  ›  专栏  ›  技术社区  ›  Mugen

脏属性是否会影响会话.query

  •  0
  • Mugen  · 技术社区  · 6 年前

    当我创建一个SQLAlchemy会话并更改某个模型的某些属性时,这些更改是否适用于 query 在任何之前 flush commit 在会议上?

    我找不到任何适当的文件来解决这种状况。

    具体来说,我在尝试验证模型创建/更新的事件侦听器中的db不变量时遇到了这个问题。我知道我有脏模特 session.dirty ,除了任何标准之外,我还需要手动查询它们吗? session.query() 我做什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ilja Everilä    6 年前

    对“是否会影响脏属性”的简短回答 session.query ,如在 "Is the Session a cache?" :

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

    实际上并不那么简单,因为在其默认配置中,SQLAlchemy会定期刷新 Session 到数据库。这被称为 autoflush 它确保向数据库发出的查询在 会话 .

    "What does the Session do ?" 也有人说

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

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