2017-11-05 20 views
0

私はPython APIからSQLクエリを実行しており、構造化されたデータ(独自のヘッダの下に列方向のデータ).CSV形式でデータを収集したいと考えています。Python APIからcsvにsqlデータを書き込む

これまでのコードです。

import pymysql.cursors 
import csv 


conn = pymysql.connect(host='159.XXX.XXX.XXX',user='proXXX',password='PXX',db='pXX',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor) 
cursor = conn.cursor() 
print (type(conn)) 
sql = "SELECT id,author From researches WHERE id < 20 " 
cursor.execute(sql) 
data = cursor.fetchall() 
print (data) 
with open('metadata.csv', 'w', newline='') as f_handle: 
    writer = csv.writer(f_handle,delimiter=',') 
    header = ['id', 'author'] 
    writer.writerow(header) 
    for row in data: 
     writer.writerow(row) 

は今、データがコンソール上に印刷されたが、in.CSVが、これは私が output ASN取得しています何のファイル得ていないされています。私は何が欠けているのですか?助けてください。

+0

あなたはループでこのコードを呼び出していますか? –

+0

はい、良い方法がありますか? – Shad

+1

'a'モードを使用する必要があります。そうしないと、毎回ファイルを書き換えます。また、一度だけあなたのヘッダーを書く... –

答えて

2
with open('metadata.csv', 'w', newline='') as f_handle: 
    fieldnames = ['id', 'author'] 
    writer = csv.DictWriter(f_handle, fieldnames=fieldnames) 
    writer.writeheader() 
    for row in data: 
     writer.writerow(row) 

あなたのデータは辞書の形式ですが、Writerオブジェクトはタプルが必要です。代わりに、DictWriterオブジェクトを使用する必要があります。

+0

素晴らしい。ありがとう@ジェリーテー – Shad

+0

簡単な質問です。私のデータベースにはpublished_dateという名前の列が含まれていますが、ヘッダー(Fieldname)を「公開日」にします。私は試して、それはエラーを投げている。希望のヘッダーを取得することは可能ですか? – Shad

+0

遅れて申し訳ありませんが、私は今週私の手にたくさんあった。とにかく、これを行うには2つの方法があります。それぞれの行の辞書のキーを置き換えるか、 'writer.writeheader()'をスキップして、代わりに 'writer.writerow({'id' : 'id'、 'author': 'author'、 'published_date': 'Published Date')) '。 – JerryTheo

関連する問題