2013-07-09 2 views
4

Я пытаюсь экспортировать таблицу sqlite в текстовый файл, и я нашел отличную помощь на этом сайте. Он отлично работает для небольших выходов, но как только я достиг около 20 000, он, по-видимому, ограничивает выход.Sqlite3/python - Экспорт из sqlite в текстовый файл csv не превышает 20k

первая попытка была:

Марк Bells UniCodeWriter как найдено в It is possible export table sqlite3 table to csv or similiar?

моя таблица имеет 15 столбцов я только что перечислил 5 здесь, чтобы сделать его легче читать

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

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

writer.writerows(results) 

вторая попытка была :

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 

четвёртая попытка/тест:

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

print response 

Результат

В попытке 1: я получаю выход 183 полных записей и первого столбца 184 запись

В попытке 2 и 3: Я получаю вывод из 181 полных записей и некоторых столбцов 182

В попытке 4: я получаю все мои данные на экране

Когда я проверить SQLite базы данных я вижу 205 записей. Я знаю, что я могу просто выводить по 100 строк за раз, но мне интересно, почему я не получаю все свои строки, выведенные

+0

Я запрограммировал это с помощью WinPython и spyder. Теперь я просто запускал его в IDLE из Python27 напрямую, и результат был правильным. – 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

Python всегда поражает меня, это очень чистый способ экспорта. Спасибо – user2565278

+0

Это не сработало для меня, и я предполагаю, что модуль pandas был изменен. Однако просто импортировать панды и использовать '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. Мне удалось записать данные без использования pandas

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

Смежные вопросы