如何使用Python将SQL查询结果输出到CSV文件?

3

我正在尝试连接Oracle表并执行SQL语句。我需要将结果集导出到CSV文件中。我的代码如下:

import pyodbc
import csv

cnxn = pyodbc.connect("DSN=11g;UID=test101;PWD=passwd")
cursor = cnxn.cursor()
cursor.execute(sql)
row = cursor.fetchall()
with open('data.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    for line in row:
        a.writerows(line)

cursor.close()

当我在for循环内使用print to line时,会得到类似于这样的结果:
('Production', 'farm1', 'dc1prb01', 'web')
('Production', 'farv2', 'dc2pr2db01', 'app.3')
('Production', 'farm5', 'dc2pr2db02', 'db.3')

这个好像不起作用了。你有什么想法我可能错过了什么吗?


2
你能解释一下 - 这不起作用 吗?它是怎么不起作用的?你还得到了什么其他信息? - Anand S Kumar
他只是使用了错误的csv.writer方法,Padraic的答案才是正确的。 - LuRsT
我遇到了这个错误:with open('data.csv', 'w', newline='') as fp: TypeError: 'newline' 是此函数的无效关键字参数。 - user1471980
1个回答

6

对于单行,可以使用writerow:

 a.writerow(line)

writerows需要一个可迭代的嵌套对象,因此它将遍历每个子字符串并逐个写入每个字符。

如果您想使用writerows,请在行上调用它:

    row = cursor.fetchall()
    with open('data.csv', 'w', newline='') as fp:
            a = csv.writer(fp, delimiter=',')
            a.writerows(row)

如果您使用python2,请删除newline='',因为newline是*python*3的关键字:
  row = cursor.fetchall()
    with open('data.csv', 'w') as fp:
            a = csv.writer(fp, delimiter=',')
            a.writerows(row)

仍然无法执行SQL。 - user1471980
1
如果你看到 ('Production', 'farm1', 'dc1prb01', 'web'),那么 SQL 为什么不工作?在这上面使用 writerows 会给你 P,r,o,d,u,c,t,i,o,n. .... - Padraic Cunningham
如果我不使用 CSV,只是打印这一行,那么我就可以打印出来。 - user1471980
@user1471980,newline = "" 是针对Python3而不是Python2的。 - Padraic Cunningham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接