Зафиксируйте несколько вставок с MySQLdb на Python

0

Я сделал профилирование моей программы python и заметил, что у них много звонков, и они занимают много времени.

Лучше ли это сделать:

db = MySQLcb.connect(...)
c = db.cursor(...)
c.execute('INSERT...)
c.commit()
c.execute('INSERT...)
c.commit()

или же

db = MySQLcb.connect(...)
c = db.cursor(...)
c.execute('INSERT...)
c.execute('INSERT...)
c.commit()

Зная, что я делаю много вложений (тысячи).

  • 0
    В MySQLdb вы можете использовать autocommit = True в connect() . И для многих вставок в одну таблицу посмотрите на executemany .
Теги:
performance
mysql-python

1 ответ

0
Лучший ответ

До тех пор, пока вы используете таблицы InnoDB, вы можете найти советы на этой странице полезными.

Большинство баз данных имеют возможности для массовой вставки, а MySQL не является исключением.

Если вы медленно находите свои вставки, убедитесь, что у вас нет набора autocommit, поскольку это заставляет транзакцию работать с каждой отдельной операцией.

  • 0
    Спасибо за ссылку, это действительно полезно! Но остается вопрос: нужно ли делать db.commit после каждого c.executemany(...) я делаю? Или одного в конце достаточно?
  • 0
    @flyingdutchman ... ваш код выше не использует executemany() который вы должны вызывать только один раз в списке значений.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню