2010-01-19 35 views
37

tengo una lista que tiene 3 filas cada una representando una fila de la tabla:Python y SQLite: insertar en la tabla

>>> print list 
[laks,444,M] 
[kam,445,M] 
[kam,445,M] 

cómo insertar esta lista en una tabla?

Mi estructura de la tabla es:

 
tablename(name varchar[100], age int, sex char[1]) 

O debería usar algo distinto lista?

Aquí es la parte código real:

for record in self.server: 
     print "--->",record 
     t=record 
     self.cursor.execute("insert into server(server) values (?)",(t[0],)); 
     self.cursor.execute("insert into server(id) values (?)",(t[1],)) 
     self.cursor.execute("insert into server(status) values (?)",(t[2],)); 

Inserción de los tres campos opera separada, pero utilizando una sola línea como

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

o

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

no.

+1

Está arreglado ahora. He usado este método incorrecto self.cursor.execute ("insertar en el servidor (servidor, c_id, estado) valores (?,?,?)", (T [0],), (t [1],) , (t [2],)) método correcto es self.cursor.execute ("insertar en el servidor (servidor, c_id, estado) valores (?,?,?)", (t [0], t [ 1], t [2],)) –

Respuesta

29
conn = sqlite3.connect('/path/to/your/sqlite_file.db') 
c = conn.cursor() 
for item in my_list: 
    c.execute('insert into tablename values (?,?,?)', item) 
+0

Gracias Dyno y Dominic - Pero no está funcionando - Esto es lo que estoy intentando ----------- \t para el registro en la lista: \t imprimir "--->", registre \t cursor.execute ("insertar en valores de proceso (?,?,?)", registro); ----------- obteniendo el error –

+0

@lakshmipathi - ¿Qué error obtienes? –

+0

Lo he intentado, excepto que la parte de prueba parcial tendrá para bucle y ejecutar stmt y excepto que la parte tiene un mensaje único que dice "error de inserción" ... simplemente imprime el mensaje de excepto parte y se cierra. ¿Cómo se puede depurar esto de manera más efectiva? –

8

Adaptado de http://docs.python.org/library/sqlite3.html:

# Larger example 
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
      ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
      ('2006-04-06', 'SELL', 'IBM', 500, 53.00), 
     ]: 
    c.execute('insert into stocks values (?,?,?,?,?)', t) 
62

hay una mejor manera

# Larger example 
rows = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
     ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
     ('2006-04-06', 'SELL', 'IBM', 500, 53.00)] 
c.executemany('insert into stocks values (?,?,?,?,?)', rows) 
connection.commit() 
+0

Tengo una consulta sobre esto porque lo he intentado pero obtengo un error al decir que tengo 6 columnas y solo proporcioné información para 5.Esto es cierto, pero la primera columna es pk entero y no es necesario que proporcione un valor. ¿Hay una manera de superar esto? - – Mike

+0

Lo descubrí. Simplemente agregue los encabezados de campo después del nombre db como lo haría normalmente. – Mike

7

No es una respuesta directa, pero aquí es una función para insertar una fila con los pares de la columna de valor a SQLite tabla:

def sqlite_insert(conn, table, row): 
    cols = ', '.join('"{}"'.format(col) for col in row.keys()) 
    vals = ', '.join(':{}'.format(col) for col in row.keys()) 
    sql = 'INSERT INTO "{0}" ({1}) VALUES ({2})'.format(table, cols, vals) 
    conn.cursor().execute(sql, row) 
    conn.commit() 

Ejemplo de uso:

sqlite_insert(conn, 'stocks', { 
     'created_at': '2016-04-17', 
     'type': 'BUY', 
     'amount': 500, 
     'price': 45.00}) 

Tenga en cuenta, que el nombre de tabla y nombres de columna deben ser validados previamente.

Cuestiones relacionadas