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

Python SQL查询结果格式化代码性能优化问询

提升Python处理SQL查询结果转JSON的性能

你现在的代码处理速度在11万行/秒,确实还有不少优化空间——主要瓶颈在纯Python层面的循环赋值和OrderedDict的创建开销上。下面给你几个实际可行的优化方案,按性能提升幅度排序:

1. 用列表推导+zip代替手动循环(最快的纯Python方案)

原代码里手动维护索引i、逐字段赋值给OrderedDict的操作,是纯Python级别的循环,速度很慢。换成zip(底层C实现)配合列表推导,能直接把行数据和列名映射成字典,效率提升非常明显。

另外,Python 3.7+的普通dict已经默认保持插入顺序了,完全不需要collections.OrderedDict,能省掉不少对象创建的开销。

优化后的核心代码:

SQLquery = "SELECT value2 FROM mytable"
# 用with语句自动管理游标,不用手动close
with connection.cursor() as cursor:
    cursor.execute(SQLquery)
    if cursor.description:
        column_names = [col[0] for col in cursor.description]
        Time1 = datetime.datetime.now()
        # 直接迭代游标(不用fetchall,节省内存+减少一次数据拷贝)
        data = [dict(zip(column_names, row)) for row in cursor]
        Time2 = datetime.datetime.now()
        print(f"处理行数:{len(data)},耗时:{Time2 - Time1}")
connection.commit()

如果你的Python版本低于3.7,还是需要OrderedDict,改成这样即可:

import collections
data = [collections.OrderedDict(zip(column_names, row)) for row in cursor]

针对单列查询的额外优化

如果是像你例子里的单列查询,还能再简化,跳过zip的开销:

column_name = column_names[0]
data = [{column_name: row[0]} for row in cursor]

2. 用Pandas处理(大数据量首选)

如果允许引入第三方库,Pandas是处理这类批量数据转换的神器——它的底层用C扩展实现,处理速度能轻松突破百万行/秒,代码也更简洁。

示例代码:

import pandas as pd

SQLquery = "SELECT time_bucket('30 minutes', datetime) AS thirty_min, AVG(value3) AS value3 FROM mytable WHERE datetime > '2019-1-1 12:0:0.00' AND datetime < '2019-1-12 12:0:0.00' GROUP BY thirty_min ORDER BY thirty_min;"

Time1 = datetime.datetime.now()
# 直接从数据库读取成DataFrame
df = pd.read_sql_query(SQLquery, connection)
# 转成字典列表(和你要的格式一致)
data = df.to_dict('records')
Time2 = datetime.datetime.now()
print(f"处理行数:{len(data)},耗时:{Time2 - Time1}")

3. 避免一次性fetchall

原代码里的cursor.fetchall()会把所有查询结果一次性加载到内存,当数据量很大时,不仅内存占用高,还会增加一次数据拷贝的开销。直接迭代游标(for row in cursor)是逐行从数据库获取数据,内存更友好,速度也更快。

性能对比参考

  • 原代码:~11万行/秒
  • 纯Python优化方案(列表推导+zip):~50-80万行/秒
  • Pandas方案:~150-300万行/秒(取决于数据类型和硬件)

最后提个小建议:原代码里的try-except捕获Exception后直接pass,这会隐藏错误信息,建议至少打印异常详情,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:23:50