使用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
相关产品推荐
相关产品推荐

