2010-11-24 92 views
5

¿Es posible exportar la tabla sqlite3 al formato csv o xls? Estoy usando python 2.7 y sqlite3.¿Es posible exportar la tabla sqlite3 a csv o similar?

+0

Por cierto, mira esta publicación (se trata de la importación desde Python, pero puede ser útil http://stackoverflow.com/questions/2887878/importing-a-csv-file-into-a-sqlite3-database-table -using-python – cristian

Respuesta

9

Toqué este guión muy básico juntos usando una clase de ejemplo ligeramente modificada de the docs; simplemente exporta una tabla completa a un archivo CSV:

import sqlite3 
import csv, codecs, cStringIO 

class UnicodeWriter: 
    """ 
    A CSV writer which will write rows to CSV file "f", 
    which is encoded in the given encoding. 
    """ 

    def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds): 
     # Redirect output to a queue 
     self.queue = cStringIO.StringIO() 
     self.writer = csv.writer(self.queue, dialect=dialect, **kwds) 
     self.stream = f 
     self.encoder = codecs.getincrementalencoder(encoding)() 

    def writerow(self, row): 
     self.writer.writerow([unicode(s).encode("utf-8") for s in row]) 
     # Fetch UTF-8 output from the queue ... 
     data = self.queue.getvalue() 
     data = data.decode("utf-8") 
     # ... and reencode it into the target encoding 
     data = self.encoder.encode(data) 
     # write to the target stream 
     self.stream.write(data) 
     # empty queue 
     self.queue.truncate(0) 

    def writerows(self, rows): 
     for row in rows: 
      self.writerow(row) 

conn = sqlite3.connect('yourdb.sqlite') 

c = conn.cursor() 
c.execute('select * from yourtable') 

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

writer.writerows(c) 

Espero que ayude!

Editar: Si desea que las cabeceras de la CSV, la forma más rápida es añadir manualmente otra fila antes de escribir los datos en la base de datos, por ejemplo:

# Select whichever rows you want in whatever order you like 
c.execute('select id, forename, surname, email from contacts') 

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

# Make sure the list of column headers you pass in are in the same order as your SELECT 
writer.writerow(["ID", "Forename", "Surname", "Email"]) 
writer.writerows(c) 

Edición 2: A la salida columnas de tubos separados, registran una costumbre CSV dialecto y pasan que en la grabadora, así:

csv.register_dialect('pipeseparated', delimiter = '|') 

writer = UnicodeWriter(open("export.csv", "wb"), dialect='pipeseparated') 

Aquí es a list of the various formatting parameters puede utilizar con un dialecto personalizado.

+0

Sí, esto es útil. Pero todos los datos están en una columna. Por ejemplo, tenía 4 columnas y 12 filas en la base de datos (sqlite3). ¿Es posible dividirla? ¿Quizás crear una tabla en CSV con encabezados? Thx – Risino

+0

No entiendo muy bien: este código ya muestra las columnas seleccionadas separadas por comas (o al menos lo hace cuando lo ejecuto). ¿Puedes publicar una fila de ejemplo del archivo CSV que has generado? –

+0

Sí, tienes razón. Sí, tienes razón. Este código está separado por comas: ID, Nombre, Apellidos, Correo electrónico, pero si es posible, quiero separarlo por columnas. Por ejemplo: | ID | Nombre | Apellido | Correo electrónico | – Risino

1

Yes.Read aquí sqlitebrowser

  • de importación y exportación registros como texto
  • de importación y exportación de tablas/archivos CSV a
  • importación y exportación de bases de datos desde/a archivos de volcado de SQL
0

Programas externos: consulte la documentación para sqlite3 para obtener más información. Puedes hacerlo desde shell/línea de comando.

Sobre la marcha: csv module le ayudará a manejar el formato de archivo CSV correctamente

Cuestiones relacionadas