Является ли вставка оптимальной? - PullRequest
5 голосов
/ 18 ноября 2011

Я хочу вставить некоторые данные в таблицу, и я хочу, чтобы множественная вставка была максимально быстрой. Я использую библиотеку sqlalchemy для Python. Я хочу знать, является ли моя вставка оптимальной, или есть лучший способ сделать это. Вот мой код:

 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

1 Ответ

3 голосов
/ 22 ноября 2011

Если вы видите журнал, вы можете проверить, что

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'))

Только одна вставка со всеми значениями, так что я думаю, что это лучший способ вставить объемные / пакетные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...