'synchronize_session=False' 在 Sqlalchemy 的更新函数中到底做了什么?它的最佳值是多少?

Mit*_*tra 16 sqlalchemy fastapi

我们的 API 中有 CRUD 函数,它使用 FastAPI 和 SQLAlchemy。
对于更新功能,我们有以下代码:

def update_user(
    user_id: uuid.UUID,
    db: Session,
    update_model: UserUpdateModel,
) -> bool:
    query = (
        db.query(User)
        .filter(
            User.user_id == user_id,
        )
        .update(update_model, synchronize_session=False)
    )
    try:
        db.commit()
    except IntegrityError as e:
        if isinstance(e.orig, PG2UniqueViolation):
            raise UniqueViolation from e
    return bool(query)

Run Code Online (Sandbox Code Playgroud)

“synchronize_session=False”在这里到底是做什么的?
它的最佳价值是什么?假的还是获取的……?
如果我们不使用它,这很重要吗?

Bas*_*n B 11

通过查看 sqlalchemy 文档,您可以找到synchronize_session 的作用以及如何正确使用它

\n

来自官方文档:

\n
\n

对于启用 ORM 的更新和删除的 1.x 和 2.0 形式,支持以下 Synchronize_session 值:

\n
    \n
  • False- don\xe2\x80\x99t 同步会话。一旦会话过期(通常发生在commit()或显式使用后),此选项是最有效且可靠的expire_all()。在过期之前,数据库中更新或删除的对象可能仍保留在会话中,且其值已过时,这可能会导致结果混乱。

    \n
  • \n
  • \'fetch\'- 通过在 UPDATE 或 DELETE 之前执行 SELECT 或使用 RETURNING(如果数据库支持)来检索受影响行的主键标识,以便可以使用新值刷新受操作影响的内存中对象(更新)或从会话中删除(删除)。update()请注意,如果给定或delete()构造显式指定列,则此同步策略不可用UpdateBase.returning()

    \n
  • \n
  • \'evaluate\'- 评估 Python 中 UPDATE 或 DELETE 语句中给出的 WHERE 标准,以在会话中查找匹配的对象。这种方法不会增加任何往返,并且在没有 RETURNING 支持的情况下效率更高。对于具有复杂条件的 UPDATE 或 DELETE 语句,该\'evaluate\'策略可能无法计算 Python 中的表达式并会引发错误。如果发生这种情况,请改用\'fetch\'该操作的策略。

    \n
  • \n
\n
\n