Pregunta sobre dictionary, python, sqlite – Python: ¿Cómo insertar un diccionario en una base de datos sqlite?

6

Tengo una base de datos sqlite con una tabla con las siguientes columnas:

id(int) , name(text) , dob(text)

Quiero insertarlo en el siguiente diccionario:

{"id":"100","name":"xyz","dob":"12/12/12"}

Las claves del diccionario son los nombres de las columnas. Cómo puedo lograrlo ?

¿Puede por favor proporcionar algún código que ha intentado? shobhit
Una posible solución sería modificar la Clase IterChars () en eldocs . Aunque no pude adaptarlo. Un vistazo asqlalchemy podría ayudar también DJJ
¿Qué has probado? ¿Cómo te estás conectando a la base de datos? ¿Estás utilizando algún tipo de ORM? pcalcao
no puede insertar un diccionario fácilmente, pero puede insertar una lista. Echar un vistazoen los documentos DJJ

Tu respuesta

4   la respuesta
4

Si, por ejemplo,c = conn.cursor(), y tu diccionario se llamadict y tu mesatablename, entonces puedes escribir

c.execute('insert into tablename values (?,?,?)', [dict['id'], dict['name'], dict['dob']])

Lo que insertará los elementos del diccionario en la tabla como usted lo requiera.

1

MySQLdb puedes usarexecutemany y pase una lista de valores que puede obtener directamente de sudict utilizandodict.values()

pequeña actualización: los diccionarios ahora mantienen el orden a partir del 3.6, y este comportamiento estará en la especificación del lenguaje a partir del 3.7. Yekta Leblebici
Tenga cuidado de ordenar cuando utilice este método, ya que el cursor se INSERTARÁ según el orden y los diccionarios no mantendrán el orden. Harrison
8

Mirando la documentaciónaquí puede agregar una sola fila:

c.execute("INSERT INTO stocks VALUES (?,?,?)", [dict["id"], dict["name"], dict["dob"]])

O puede usar una lista y agregar varias filas de una sola vez:

# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
¿Tal vez actualizar esto para mostrar cómo se puede insertar una lista de los diccionarios del autor de la pregunta? Con eso creo que tu respuesta es mejor que la mía. Eliot Ball
6

e que necesite pulido en el departamento de nombres de tablas)

def post_row(conn, tablename, rec):
    keys = ','.join(rec.keys())
    question_marks = ','.join(list('?'*len(rec)))
    values = tuple(rec.values())
    conn.execute('INSERT INTO '+tablename+' ('+keys+') VALUES ('+question_marks+')', values)

row = {"id":"100","name":"xyz","dob":"12/12/12"}
post_row(my_db, 'my_table', row)

Preguntas relacionadas