2017-11-05 9 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

굉장합니다. 감사합니다 @ JerryTheo – Shad

+0

간단한 질문. 내 데이터베이스에 published_date라는 열이 포함되어 있지만 헤더 (Fieldname)를 "Published Date"로 지정합니다. 시도했는데 오류가 발생했습니다. 원하는 헤더를 가져올 수 있습니까? – Shad

+0

지연된 응답을 드려 죄송합니다. 이번 주에 많은 도움을 받았습니다. 어쨌든, 당신이 이것을 할 수있는 두 가지 방법이 있습니다, 여러분은 각 행에 대해 사전에서 키를 교체하거나'writer.writeheader()'를 건너 뛰고 이것을 대신 writer.writerow ({ 'id' : 'id', 'author': 'author', 'published_date': 'Published Date'))'. – JerryTheo