如何在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
相关产品推荐
相关产品推荐

