2013-07-09 5 views
4

sqlite 테이블을 텍스트 파일로 내보내려고하는데이 사이트에서 큰 도움을 얻었습니다. 그것은 작은 출력을 위해 잘 작동하지만 일단 20k 정도가되면 출력을 제한하는 것처럼 보입니다.Sqlite3/python - sqlite에서 csv 텍스트 파일로 내보내기가 20k를 초과하지 않습니다.

첫 번째 시도했다 :

마크 벨 UniCodeWriter을 It is possible export table sqlite3 table to csv or similiar?

에있는 나의 표는 쉽게

writer = UnicodeWriter(open("Export8.csv", "wb")) 

writer.writerow(["RunID","JobNumber","StartTime","EndTime","Period"]) 

writer.writerows(results) 

초 시도가 있었다 읽을 수 있도록하기 위해 난 그냥 여기에 5 나열된 15 개의 열이 있습니다 :

response = cursor.execute("SELECT RunID, JobNumber, StartTime, EndTime, strftime('%s',substr(endtime,1,19)) - strftime('%s',substr(starttime,1,19)) FROM tblTest WHERE RunID <>0") 

strfile = open('_output1.csv','wb') 

for row in response: 
    print >> strfile,row 

번째 시도였다

strfile = open('_output3.csv','wb') 

while True: 

    row = cursor.fetchone() 

    if row == None: 

     break 
    print >> strfile,row 
    enter code here 

4 회 시도/시험 :

response = cursor.execute("SELECT RunID, JobNumber, StartTime, EndTime, Period FROM tblTest WHERE RunID <>0") 

print response 

결과

시도 (1) ​​

: I 얻을 183 개 전체 기록과 184의 첫 번째 열의 출력 레코드

시도 2와 3에서 : 나는 전체 레코드 181 개를 출력하고 일부 열은 182

0123을 얻습니다. 시도 4에서

: 내가 sqlite가 데이터베이스를 검사 할 때 은 내가 205 개 기록을 화면

내 모든 데이터를 볼 얻을. 나는 한 번에 100 줄만 출력 할 수 있다는 것을 알고 있지만 왜 모든 줄이 출력되지 않는지 궁금합니다.

+0

나는 이것을 WinPython과 스파이더를 사용하여 프로그래밍했다. 이제 방금 Python27의 IDLE에서 직접 실행했는데 결과는 정확했습니다. – user2565278

답변

5

pandas을 사용하여 SQL 데이터를로드 한 다음 csv로 덤프 할 수 있습니다. 당신은 종속성 (특히 NumPy)을 설치해야만 사용할 수 있습니다. 그것은 매우 간단합니다 :

import sqlite3 
import pandas.io.sql as sql 
con = sqlite3.connect('database.db') 
table = sql.read_frame('select * from some_table', con) 
table.to_csv('output.csv') 
+0

파이썬은 항상 나를 놀라게합니다. 이것은 아주 깨끗한 방법입니다. 감사합니다. – user2565278

+0

이것은 나에게 적합하지 않으며 팬더 모듈이 변경되었다고 가정합니다. 그러나 팬더를 가져 와서'pandas.read_sql ('select * from some_table', con)'을 사용하면 올바른 결과를 얻을 수 있습니다. –

1

writerows에 대한 인수로 커서 자체를 사용해 보았습니까?

cursor.execute("select * from test") 

csv_path = "out.csv" 
with open(csv_path, "wb") as csv_file: 
    csv_writer = csv.writer(csv_file) 
    # Write headers. 
    csv_writer.writerow([i[0] for i in cursor.description]) 
    # Write data. 
    csv_writer.writerows(cursor) 
1

3.4 및 sqlite3을 사용하고 있습니다. 나는 팬더를 사용하지 않고 데이터를 쓸 수 있었다.

c = cur.execute("select * from HChange") 

with open('c:/tmp/bse/Output.csv','w', newline='') as file: 
    for i in c: 
     a=c.fetchone() 
     csv.writer(file).writerow(a) 
+0

감사합니다. 그것은 나를 위해 일했습니다. – Vidyadhar

관련 문제