Sqlite3 / python: la exportación desde sqlite a csv no supera los 20k

Estoy intentando exportar una tabla sqlite a un archivo de texto y encontré una gran ayuda en este sitio. Funciona muy bien para salidas más pequeñas, pero una vez que alcanzo los 20k, parece limitar la salida.

primer bash fue

Mark Bells UniCodeWriter tal como se encuentra en ¿ Es posible exportar la tabla sqlite3 a csv o similar?

Mi tabla tiene 15 columnas. Acabo de enumerar 5 aquí para que sea más fácil de leer.

writer = UnicodeWriter(open("Export8.csv", "wb")) writer.writerow(["RunID","JobNumber","StartTime","EndTime","Period"]) writer.writerows(results) 

El segundo bash fue:

 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 

El tercer bash fue:

 strfile = open('_output3.csv','wb') while True: row = cursor.fetchone() if row == None: break print >> strfile,row enter code here 

4to bash / prueba:

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

Resultado

En el bash 1: obtengo una salida de 183 registros completos y la primera columna del registro 184

En el bash 2 y 3: obtengo una salida de 181 registros completos y algunas columnas de los 182

En el bash 4: obtengo todos mis datos en la pantalla

Cuando compruebo la base de datos sqlite veo 205 registros. Soy consciente de que solo puedo generar 100 líneas a la vez, pero me pregunto por qué no obtengo todas mis filas.

Puede intentar usar pandas para cargar los datos de SQL y luego volcarlos en un csv. Tendría que instalar las dependencias (especialmente NumPy) para usarlo. Es realmente simple entonces:

 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') 

¿Has intentado usar el cursor como argumento para los 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) 

Estoy usando 3.4 y sqlite3. Me las arreglé para escribir los datos sin usar 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)