¿Qué es un archivo CSV?
Un archivo CSV (Comma Separated Values) es un archivo que contiene datos separados por comas (u otros separadores como tabuladores, espacios, puntos y coma, etc). En estos archivos cada línea representa un registro.
Por ejemplo, este archivo toma la forma:
Código, Nombre, Departamento
014285, Colegio Belén, Lima
028514, IIEE 2042, Arequipa
042857, Colegio Toribianitos, Lima
¿Cómo convertir un archivo CSV a un archivo SQLITE?
SQLite viene con su propia línea de comandos para realizar algunas tareas, entre ellas, la importación de archivos CSV.
::sqlite
>>> sqlite3
>>> sqlite> .mode csv
>>> sqlite> .import input.csv table_name
>>> sqlite> .schema table_name
>>> sqlite> .save output.db
Lo que acabamos de realizar es:
- Activar el modo CSV (.mode csv)
- Importar el archivo en la tabla indicada
- Verificamos el script utilizado para crear la tabla anterior
- Exportamos el archivo a una base de datos sqlite
- Fin :)
¿Por qué no uso python?
En mi caso, el archivo utilizado tenía 170k+ registros y no requería la modificación de sus registros previo a la inserción, por lo que utilizar python era mucho más lento y terminé usando la shell de sqlite directamente.
¿Cómo convertir un archivo CSV a SQLite con Python?
Dependiento de nuestras necesidades podemos:
- Utilizar un ORM para generar el código SQL (Pewee ORM, PonyORM, etc)
- Utilizar pandas
- Utilizar dataset (o en general alguna otra librería), por ejemplo:
::python
import csv, uuid, dataset
def csv2dataset(filename_input, filename_output):
with open(filename_input, 'r') as file_input:
input_data = csv.DictReader(file_input)
db = dataset.connect('sqlite:///' + filename_output)
table = db['contactos']
for contact in input_data:
contact['uuid'] = uuid.uuid4().hex
table.insert(contact)
if __name__ == '__main__':
csv2dataset('direcciones.csv', 'direcciones.sqlite')
Comentarios !
comments powered by Disqus