You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-SQLAlchemy中User.query.get(1)的SQLAlchemy2.0兼容替代方案及疑问

Flask-SQLAlchemy 3.x 兼容SQLAlchemy 2.0的get()替代方案解析

问题背景

SQLAlchemy 2.0已弃用Query.get()方法,Flask-SQLAlchemy的旧版查询接口(如Model.query)也被标记为过时。在项目中执行User.query.get(1)会触发旧版API警告。

核心疑问

Flask-SQLAlchemy中User.query.get(1)的SQLAlchemy 2.0兼容替代写法是什么?为何Flask-SQLAlchemy官方文档推荐方案2,而方案1才是SQLAlchemy 2.0迁移指南中给出的标准新版本写法?

两种替代方案

方案1:db.session.get(User, 1)

该写法出自SQLAlchemy官方2.0迁移指南,可在项目中正常运行,但仅在Flask-SQLAlchemy 3.0.x文档的get_or_404 API参考中有简要提及。

方案2:db.session.execute(db.select(User).filter_by(id=1)).scalar()

该写法来自Flask-SQLAlchemy官方文档,作为旧版Model.query和session.query的通用替代方案,同样能正常执行。

方案对比

  • 方案1与旧版User.query.get(1)行为高度一致:首次执行会将结果缓存到session中,后续调用不会重复发起数据库查询
  • 方案2每次执行都会直接访问数据库,不利用session的缓存机制

环境配置

  • 版本:Python 3.11虚拟环境,使用Flask 2.2.2、Flask-SQLAlchemy 3.0.3、SQLAlchemy 2.0.1
  • 项目结构:遵循Flask Mega-Tutorial第四部分(数据库)的设计

内容的提问来源于stack exchange,提问作者Patrick Cantwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:35:20