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

使用pyodbc查询DB2数据库返回结果无表头行问题求助

解决pyodbc查询DB2导出CSV缺少表头的问题

要给导出的CSV添加表头,你可以利用pyodbc游标对象的description属性获取查询结果的列名,然后在写入数据前先把表头写入文件。另外你原代码里while循环没有缩进在with代码块内,这会导致文件操作报错,需要修正缩进。

方法一:修正原代码并添加表头

修改后的代码如下:

import csv
import pyodbc

cnxn = pyodbc.connect('DSN=PMDATABASE connect 32;PWD=xzxy')
cursor = cnxn.cursor()

querySQL = "SELECT * FROM tabl100 WHERE dist_typ_cd='H' with ur for fetch only fetch first 5 rows only;"
cursor.execute(querySQL)

# 获取表头:从cursor.description中提取列名
headers = [desc[0] for desc in cursor.description]

with open("data.csv", 'w') as FH:
    # 写入表头
    FH.write(",".join(headers))
    FH.write("\n")
    # 写入数据行
    while True:
        rows = cursor.fetchmany(5) 
        if not rows:
            break
        for row in rows:
            FH.write(",".join(str(element) for element in row))
            FH.write("\n")

cursor.close()
cnxn.close()

方法二:使用csv模块更规范地写入(推荐)

手动拼接逗号容易出现字段包含逗号、引号等场景的格式错误,建议用Python内置的csv.writer来处理:

import csv
import pyodbc

cnxn = pyodbc.connect('DSN=PMDATABASE connect 32;PWD=xzxy')
cursor = cnxn.cursor()

querySQL = "SELECT * FROM tabl100 WHERE dist_typ_cd='H' with ur for fetch only fetch first 5 rows only;"
cursor.execute(querySQL)

headers = [desc[0] for desc in cursor.description]

with open("data.csv", 'w', newline='') as FH:
    writer = csv.writer(FH)
    # 写入表头
    writer.writerow(headers)
    # 批量写入数据
    while True:
        rows = cursor.fetchmany(5)
        if not rows:
            break
        writer.writerows(rows)

cursor.close()
cnxn.close()

说明:

  • cursor.description返回一个元组列表,每个元组的第一个元素对应查询结果中一列的名称
  • 使用csv.writer会自动处理字段中的特殊字符(比如逗号、换行),保证CSV格式的正确性
  • 最后记得关闭游标和数据库连接,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:12:40