PYODBC Fetchmany to csv 仅输出标头



我正在尝试使用 pyodbc 将一个大表写入csv fetchmany() . 我可以正确连接,但唯一写入的记录是标头。 循环访问数据库游标的正确方法是什么?

cxn = pyodbc.connect(cxn data)
mssql_cursor = cxn.cursor()
mssql_cursor.execute(sql_query)
c = csv.writer(open('file.csv', 'w', encoding ='UTF-8', newline='n'), delimiter='|')
c.writerow([i[0] for i in mssql_cursor.description])
results = mssql_cursor.fetchmany(10000)
while results:
    c.writerows(results)
    results = mssql_cursor.fetchmany(10000)
mssql_cursor.close()
cxn.close()

编辑:看起来没有通过fetchmany方法返回任何内容。 我添加了print(len(results)),结果是 0。

我会保持简单,只是迭代:

cxn = pyodbc.connect(cxn data)
mssql_cursor = cxn.cursor()
rows = mssql_cursor.execute(sql_query)
with open('file.csv', 'w', encoding ='UTF-8', newline='n') as csvfile:
    c = csv.writer(csvfile, delimeter='|')
    for row in rows:
        c.writerow(row)
mssql_cursor.close()
cxn.close()

这行得通吗?如果它在这里工作并且您想切换到 executemany() ,修改应该相当容易。

测试表明,至少部分问题源于与csv.writer关联的file对象的处理。使用上下文管理器(with块)显式处理file似乎已经为我解决了问题:

with open('file.csv', 'w', encoding ='UTF-8', newline='n') as csvfile:
    c = csv.writer(csvfile, delimiter='|')
    c.writerow([i[0] for i in mssql_cursor.description])
    results = mssql_cursor.fetchmany(10000)
    while results:
        c.writerows(results)
        results = mssql_cursor.fetchmany(10000)

相关内容

  • 没有找到相关文章

最新更新