2010-05-18 8 views
5

En la CLI de cliente de sqlite3, hay ".import file TABLE_name" para hacerlo.¿Alguna otra forma de importar archivos de datos (como .csv) en el módulo python sqlite3? [no insertar uno por uno]

Pero, no quiero instalar sqlite3 en mi servidor actualmente.

En el módulo python sqlite3, podemos crear y editar una base de datos.

Pero no he encontrado una manera de importar el archivo de datos a una TABLA, , excepto la inserción de filas una por una.

¿Alguna otra forma?

Respuesta

7

podría insertar en una sola toma utilizando executemany de comandos en lugar de insertar una por una

Digamos que tengo con usuarios.csv siguientes contenidos

"Hugo","Boss" 
"Calvin","Klein" 

y básicamente abiertos con el módulo csv y pasarlo a .executemuy función

import csv,sqlite3 

persons= csv.reader(open("users.csv")) 
con = sqlite3.connect(":memory:") 

con.execute("create table person(firstname, lastname)") 
con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) 

for row in con.execute("select firstname, lastname from person"): 
    print row 

#(u'Hugo', u'Boss') 
#(u'Calvin', u'Klein') 
+0

gracias, S.Mark. es muy útil. parece que no hay una función tipo ".import" – user343638

+0

@cyaos: no hay. Por cierto, la pregunta es muy popular en SO, por ejemplo: http://stackoverflow.com/questions/2346074/execute-sqlite3-dot-commands-from-python-or-register-collation-in-command-line Y una cosa más que debe saber es que '.import' en CLI es bastante primitivo: simplemente se divide en el separador y fallará cuando los datos contengan separador a medida que se cita el valor correspondiente. – newtover

Cuestiones relacionadas