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

如何在Flask中使用SQLAlchemy将表列转换为Python数组

Flask-SQLAlchemy 表列转数组指南

嘿,作为刚踩过SQLAlchemy坑的过来人,完全懂你想要把表列转成数组的需求!下面分几种常见场景给你具体的实现方法:

1. 获取表的所有列名称数组

如果你需要拿到DeviceTable定义的所有列名(比如做前端表单的字段映射),可以直接通过表的元数据来提取:

# 提取所有列名到数组
column_names = [col.name for col in DeviceTable.__table__.columns]
# 输出结果:['id', 'name', 'modes', 'MN1', 'MN2', 'MN3']

要是你想排除某些列(比如主键id),加个条件判断就行:

# 排除id列的列名数组
filtered_columns = [col.name for col in DeviceTable.__table__.columns if col.name != 'id']

2. 获取单条记录的列值数组

如果是要把某一条设备记录的所有字段值转成数组,先查询到目标记录,再通过getattr()按列名顺序提取值:

# 先获取一条记录(这里用id=1做示例)
device = DeviceTable.query.get(1)

if device:
    # 按列定义顺序提取所有值到数组
    device_values = [getattr(device, col.name) for col in DeviceTable.__table__.columns]
    # 输出类似:[1, "智能灯", "自动/手动", "亮度调节", "色温调节", "定时开关"]

3. 获取所有记录的某一列值数组

要是你需要把所有设备的某个字段(比如name)收集成数组,直接用列表推导遍历查询结果即可:

# 提取所有设备的name到数组
all_device_names = [device.name for device in DeviceTable.query.all()]
# 输出类似:["智能灯", "加湿器", "扫地机器人"]

小提示

  • 如果只想提取非空约束的列(nullable=False),可以在列表推导里加判断:
    required_cols = [col.name for col in DeviceTable.__table__.columns if not col.nullable]
    
  • 要是你用的是较新的SQLAlchemy版本,也可以用DeviceTable.__mapper__.columns替代__table__.columns,效果是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:26:42