2011-01-06 6 views
19

를 표시해야합니다나는 다음과 같은 한 필드 이름

import MySQLdb as dbapi 
import sys 
import csv 

dbServer='localhost' 
dbPass='supersecretpassword' 
dbSchema='dbTest' 
dbUser='root' 

dbQuery='SELECT * FROM pbTest.Orders;' 

db=dbapi.connect(host=dbServer,user=dbUser,passwd=dbPass) 
cur=db.cursor() 
cur.execute(dbQuery) 
result=cur.fetchall() 

c = csv.writer(open("temp.csv","wb")) 
c.writerow(result) 

이것은이 왜곡 혼란을 생산하고 있습니다. 나는 인쇄 레코드 [0] 등을 사용하는 것에 익숙합니다. 포맷팅을 어떻게 설정해야하는지 잘 모르겠습니다. 콘솔에서 쿼리와 같은 것을 생성합니다. 나는 mysql 서버에서 간단한 INTO OUTFILE을 할 수 없다.

답변

15

result은 행 목록입니다.

for row in result: 
    c.writerow(row) 
+0

정말 감사합니다. 필드 이름을 어떻게 써도 될까요? – Mathnode

+4

@teatime -'result [0] .keys' 또는 이와 비슷한'row.keys'에서 필드 이름을 얻을 수 있습니다. – mtrw

+1

불행히도이 대답은 질문 제목에 완전히 대답하지 않습니다 ("필드 이름 표시 필요"). @ mtrw의 주석이 도움이되지만 주어진 코드에는 적용 할 수 없습니다 (튜플 객체에는 '키'속성이 없습니다). 커서가 사전 커서 (예 : dbconn.cursor (dictionary = True)를 사용하여 생성 된 경우)에 적용될 수 있습니다. – LarsH

1

작은 파이썬을 알고 있지만, 인터넷 검색을 한 후에는 단일 행을 예상하는 writerow가 아닌 ​​여러 행을 기록하는 writer (S를 사용)를 사용해야합니다.

내가 말했듯이 이것은 나에게서 어둠 속에서 약간의 찌르기 다.

23

당신은 반복없이 csv 파일에 대한 모든 결과를 덤프 할 수 있습니다 : 당신이 그 목록을 반복하고 각 행에 작성해야 그래서

rows = cursor.fetchall() 
fp = open('/tmp/file.csv', 'w') 
myFile = csv.writer(fp) 
myFile.writerows(rows) 
fp.close() 
+1

좋은 대답. 'file'이 (가) 키워드이므로 myfile과 (과) 무언가에 – Will

+1

이 작품은 위대한하지만 어쨌든 필드 이름/열 이름을 얻을 수 있습니다. –

+0

고마워, 이거 아주 편리하다. –

1

을 그냥 대답을 @jwhat하는 한 가지 더 추가 .

Windows에서이 CSV 파일을 여는 경우 여분의 빈 줄을 처리해야합니다. 2.7의 기본 lineterminator 그대로

다만, 다음에 코드를 변경 \ 연구 \ n이 건너 오는 사람을위한 열 헤더 이름

myFile = csv.writer(fp, lineterminator='\n') 
+0

고마워요! 나는 개방되어있어 거기에서 빈 줄을 제거하고 항상 고통 스러웠다. 그리고 나는 그것을 멈추는 법을 결코 알지 못했다. – Mwspencer

0

답 : 은 (I가 Jwhat의 방법을 사용하고 있습니다 csv에 쓰기)

result = cur.fetchall() 

#Getting Field Header names 
column_names = [i[0] for i in cur.description] 
fp = open('Result_Set.csv' 'w') 
myFile = csv.writer(fp, lineterminator = '\n') #use lineterminator for windows 
myFile.writerow(column_names) 
myFile.writerows(result) 
fp.close() 
관련 문제