2011-11-18 15 views
5

Quiero insertar algunos datos en una tabla y quiero que la inserción múltiple sea lo más rápida posible. Yo uso la biblioteca sqlalchemy para Python. Quiero saber si mi inserción es óptima, o hay una mejor manera de hacerlo that.Here es mi código:¿La inserción es óptima?

from sqlalchemy import * 
    from sqlalchemy import schema 

    metadata = schema.MetaData() 

    engine = create_engine('sqlite:///:memory:', echo=True) 

    users = Table('users', metadata, 
     Column('id', Integer, primary_key=True), 
     Column('firstname', String(40)), 
     Column('lastname', Integer), 
     ) 

    metadata.create_all(engine) 
    ins = users.insert() 
    conn = engine.connect() 

    conn.execute(users.insert(), [ 
     {'id': 1, 'firstname' : 'Name1', 'lastname' : 'Lname1'}, 
     {'id': 2, 'firstname' : 'Name2', 'lastname' : 'Lname2'}, 
     {'id': 3, 'firstname' : 'Name3', 'lastname' : 'Lname3'} 
    ]) 

    metadata.bind = engine 
+0

Se ve bien .. hasta ahora! –

Respuesta

3

Si ve el registro a continuación, se puede comprobar que

2011-11-22 10:15:37,188 INFO sqlalchemy.engine.base.Engine SELECT DATABASE() 
2011-11-22 10:15:37,188 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,191 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%' 
2011-11-22 10:15:37,191 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,193 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names' 
2011-11-22 10:15:37,193 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,194 INFO sqlalchemy.engine.base.Engine SHOW COLLATION 
2011-11-22 10:15:37,194 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,200 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 
2011-11-22 10:15:37,201 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,203 INFO sqlalchemy.engine.base.Engine DESCRIBE `users` 
2011-11-22 10:15:37,203 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,204 INFO sqlalchemy.engine.base.Engine ROLLBACK 
2011-11-22 10:15:37,206 INFO sqlalchemy.engine.base.Engine 
CREATE TABLE users (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    firstname VARCHAR(40), 
    lastname INTEGER, 
    PRIMARY KEY (id) 
) 


2011-11-22 10:15:37,206 INFO sqlalchemy.engine.base.Engine() 
2011-11-22 10:15:37,331 INFO sqlalchemy.engine.base.Engine COMMIT 
2011-11-22 10:15:37,333 INFO sqlalchemy.engine.base.Engine INSERT INTO users (id, firstname, lastname) VALUES (%s, %s, %s) 
2011-11-22 10:15:37,333 INFO sqlalchemy.engine.base.Engine ((1, 'Name1', 'Lname1'), (2, 'Name2', 'Lname2'), (3, 'Name3', 'Lname3')) 

Sólo un inserto con todos los valores, así que creo que esta es la mejor manera de insertar datos a granel/lote.

Cuestiones relacionadas