insertar - crear nueva columna python
Cómo usar mysqldb de Python para insertar muchas filas a la vez (2)
De la Guía del usuario de MySQLdb :
c.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
[
("Spam and Sausage Lover''s Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don''t Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
así que en tu caso:
c.executemany("insert into T (F1,F2) values (%s, %s)",
[(''a'',''b''),(''c'',''d'')])
Tengo una lista de listas, por ejemplo [[''a'',''b''],[''c'',''d'']]
.
Tengo una tabla llamada T
y dos campos F1
, F2
. El primer elemento en la lista de campos se asigna a F1
, segundo a F2
.
¿Cómo puedo insertar filas para cada lista interna en un solo comando o llamada, en lugar de usar un bucle for como este?
for i in [[''a'',''b''],[''c'',''d'']]:
c.execute("insert into T (F1,F2) values (%s, %s)", (i[0], i[1]))
Es posible insertar todas las filas en una sola declaración como @adamhajari, y evitar inyecciones de sql como @zenpoy, al mismo tiempo. Solo necesita crear una declaración de inserción grande y dejar que mysqldb''s execute
el formateo.
values_to_insert = [(''a'',''b''),(''c'',''d'')]
query = "INSERT INTO T (F1, F2) VALUES " + ",".join("(%s, %s)" for _ in values_to_insert)
flattened_values = [item for sublist in values_to_insert for item in sublist]
c.execute(query, flattened_values)
No es super legible, pero puede ser un poco más rápido que la ejecución (intenté insertar lotes de 50000 filas en una base de datos local, la ejecución fue 20% más lenta).