2015-08-19 42 views
2

我想連接到oracle表並執行一個sql。我需要將結果集導出到csv文件。我的代碼如下:你怎麼寫輸出的sql到python的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循環打印到行,我得到這樣的:

('Production', 'farm1', 'dc1prb01', 'web') 
('Production', 'farv2', 'dc2pr2db01', 'app.3') 
('Production', 'farm5', 'dc2pr2db02', 'db.3') 

這是行不通的。任何想法,我可能會錯過?

+2

你能解釋一下 - *這不工作*?它怎麼不起作用?你還有什麼? –

+0

他只是對csv.writer使用了錯誤的方法,Padraic的答案是正確的。 – LuRsT

+0

我得到這個錯誤:打開('data.csv','w',newline ='')爲fp: TypeError:'newline'是此函數的無效關鍵字參數 – user1471980

回答

4

這將是writerow爲單行:

a.writerow(line) 

writerows預計iterables的迭代,所以它會遍歷子單獨寫每個字符。

如果你想使用writerows稱之爲上排:

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

如果您正在使用python2刪除newline='',換行符是*蟒蛇* 3關鍵字:

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

仍然無法執行sql – user1471980

+1

如果你看到'('Production','farm1','dc1prb01','web')'sql如何不工作?使用這些作者會給你'P,r,o,d,u,c,t,i,o,n。 ....' –

+0

如果我不使用csv,只是打印行,我可以打印。 – user1471980