Python执行DB2 SQL脚本导出CSV行数不符问题求助
解决方案:Python连接DB2查询结果行数少于DBeaver的问题
针对你遇到的Python脚本查询DB2仅返回10800行、但DBeaver能返回34000行的问题,可尝试以下几种解决方法:
1. 调整游标结果集获取参数
ibm_db游标默认的结果集限制可能导致部分数据未被读取,可通过设置游标属性扩大单次获取的行上限:
from ibm_db import connect, SQL_ATTR_ROWSET_SIZE import ibm_db_dbi import csv DBdetails = connect('DATABASE=;' 'HOSTNAME=;' 'PORT=;' 'PROTOCOL=;' 'UID=;' 'PWD=;', '', '') conn = ibm_db_dbi.Connection(DBdetails) with open("DB2SQLquery.sql", "r") as script_file: sql_script = script_file.read() cursor = conn.cursor() # 设置游标行集大小,扩大单次获取量 ibm_db.set_option(cursor, {SQL_ATTR_ROWSET_SIZE: 10000}, 0) cursor.execute(sql_script) with open("output.csv", "w", newline="") as file: writer = csv.writer(file) writer.writerow([i[0] for i in cursor.description]) # 直接获取全部结果,避免分批遗漏 rows = cursor.fetchall() writer.writerows(rows) cursor.close() conn.close()
2. 使用Pandas直接读取导出
Pandas的read_sql方法会自动处理完整结果集的读取,避免手动分批获取可能出现的遗漏:
from ibm_db import connect import ibm_db_dbi import pandas as pd DBdetails = connect('DATABASE=;' 'HOSTNAME=;' 'PORT=;' 'PROTOCOL=;' 'UID=;' 'PWD=;', '', '') conn = ibm_db_dbi.Connection(DBdetails) with open("DB2SQLquery.sql", "r") as script_file: sql_script = script_file.read() # 一次性读取完整结果集 df = pd.read_sql(sql_script, conn) # 导出CSV,排除索引列 df.to_csv("output.csv", index=False) conn.close()
3. 统一事务隔离级别
DBeaver与Python脚本可能使用了不同的事务隔离级别,导致查询数据范围不一致。可调整Python连接的隔离级别匹配DBeaver默认设置:
from ibm_db import connect import ibm_db_dbi import pandas as pd DBdetails = connect('DATABASE=;' 'HOSTNAME=;' 'PORT=;' 'PROTOCOL=;' 'UID=;' 'PWD=;', '', '') conn = ibm_db_dbi.Connection(DBdetails) # 设置读未提交隔离级别,与多数SQL客户端默认一致 conn.set_isolation_level(ibm_db_dbi.SQL_TXN_READ_UNCOMMITTED) with open("DB2SQLquery.sql", "r") as script_file: sql_script = script_file.read() df = pd.read_sql(sql_script, conn) df.to_csv("output.csv", index=False) conn.close()
4. 验证SQL脚本完整性
确保读取的SQL脚本无隐藏内容(如多余分号、注释或无关语句),可直接将SQL硬编码到脚本中测试:
# 替换文件读取部分,直接使用目标SQL sql_script = """SELECT USERTYPE,TYPENAME FROM mytable t WHERE VALID = 'V'""" cursor.execute(sql_script)
内容的提问来源于stack exchange,提问作者Eoin Power
相关产品推荐
相关产品推荐

