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

SQLAlchemy+pyodbc查询返回无键元组列表,需转换为JSON格式

解决SQLAlchemy/pyodbc查询结果转JSON的问题

嘿,我懂你的困扰——返回的元组列表只有值没有对应键,转成JSON完全没法直接用对吧?别担心,咱们只要把元组和查询的列名配对成字典,就能轻松得到结构清晰的JSON啦。下面给你两种实用的解决方法:

方法一:用SQLAlchemy引擎处理(推荐)

既然你已经在用SQLAlchemy,不如直接用它的引擎来连接和查询,获取列名会更省心:

from sqlalchemy import create_engine, text
from flask import jsonify

# 用SQLAlchemy创建连接引擎
engine = create_engine('mssql+pyodbc:///?odbc_connect=DRIVER={SQL Server};SERVER=你的服务器名;DATABASE=你的数据库名;UID=用户名;PWD=密码')

# 执行查询并转换格式
with engine.connect() as conn:
    # 替换成你的SQL语句
    result = conn.execute(text("SELECT id, name, age FROM 你的表名"))
    # 获取查询结果的列名
    column_names = result.keys()
    # 把每一行元组转换成键值对字典
    result_dicts = [dict(zip(column_names, row)) for row in result]
    
    # 在Flask接口里直接用jsonify返回即可
    return jsonify(result_dicts)

方法二:直接用pyodbc处理列名

如果你习惯用pyodbc直接连接,也可以通过游标获取列名来转换:

import pyodbc
from flask import jsonify

client = pyodbc.connect('DRIVER={SQL Server};SERVER=你的服务器名;...')  # 你的完整连接字符串
cursor = client.cursor()

# 执行查询
cursor.execute("SELECT * FROM 你的表名")

# 从游标描述中提取列名(description每个元素的第一个值就是列名)
column_names = [col[0] for col in cursor.description]
# 把所有查询行转成字典列表
result_dicts = [dict(zip(column_names, row)) for row in cursor.fetchall()]

# Flask接口中直接返回结构化JSON
return jsonify(result_dicts)

原理说明

元组本身只是一组有序的值,没有字段标识。我们通过获取查询语句对应的列名,把每个元组的元素和列名绑定成字典,这样转成JSON后就是标准的键值对结构,不管是前端还是其他服务都能轻松解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:47