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\n对于启用 ORM 的更新和删除的 1.x 和 2.0 形式,支持以下 Synchronize_session 值:
\n\n
\n- \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\'该操作的策略。
| 归档时间: |
|
| 查看次数: |
15328 次 |
| 最近记录: |