You need to enable JavaScript to run this app. Flask-SQLAlchemy如何将BaseQuery查询结果转为字典列表
优惠活动
大模型
产品
解决方案
定价
更多

Flask-SQLAlchemy如何将BaseQuery查询结果转为字典列表

Flask-SQLAlchemy查询结果转字典列表实现

实现步骤

  • 首先调用BaseQuery对象的.all()方法,触发数据库查询拿到对应模型实例的列表,避免在查询构造器阶段就尝试访问不存在的属性
  • 遍历每个模型实例,提取指定字段组装为独立字典,最终拼接为符合要求的字典列表

常用实现方式

1. 显式字段映射(适合固定字段返回的场景)

直接在列表推导式中手动枚举需要返回的字段,完全控制输出的键值对内容:

# 拉取按创建时间排序的全量查询结果
events = events_db.query.order_by(events_db.date_created).all()
# 转换为指定字段的字典列表
result = [
    {
        "id": record.id,
        "location": record.location,
        "event": record.event,
        "date_created": record.date_created,
        "background": record.background
    }
    for record in events
]

这种方式的优点是逻辑透明,不会带出模型中定义但不需要返回的冗余字段,字段映射规则可以根据需求灵活调整,转换完成后可直接通过result[行索引][字段名]的方式访问任意位置的字段值

2. 通用列提取(适合字段多、需频繁调整返回字段的场景)

基于模型定义的表结构自动提取所有业务字段,避免重复手写字段名:

def serialize_model(record):
    # 遍历模型绑定的所有表字段,自动排除SQLAlchemy内部生成的状态属性
    return {
        column.name: getattr(record, column.name)
        for column in record.__table__.columns
    }

# 批量转换查询结果
result = [serialize_model(record) for record in events]

这种方式的优点是可复用性强,后续模型新增需要返回的字段时,不需要修改转换逻辑,只要在模型中定义对应列就会自动被提取,减少重复代码

注意事项

  • 不要直接读取模型实例的原生__dict__属性做转换,该属性会附带_sa_instance_state这类SQLAlchemy内部维护的非业务字段,会造成结果冗余
  • 如需要排除部分不需要返回的字段,只需要在字典生成的逻辑中跳过对应列名即可,不需要调整整体转换流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 19:45:10