← retour aux snippets

sqlite3.executemany: insertions par lot dans une transaction

Insérer efficacement plusieurs lignes avec executemany et commit unique.

objectif

Insérer efficacement plusieurs lignes avec executemany et commit unique.

code minimal

import sqlite3
con = sqlite3.connect(":memory:")
con.execute("create table t(x int)")
con.executemany("insert into t(x) values(?)", [(i,) for i in range(5)])
con.commit()
n = con.execute("select count(*) from t").fetchone()[0]
print(n == 5)  # attendu: True
con.close()

utilisation

import sqlite3
con = sqlite3.connect(":memory:")
con.execute("create table t(a int, b text)")
data = [(1,"x"), (2,"y")]
con.executemany("insert into t(a,b) values(?,?)", data); con.commit()
print(con.execute("select sum(a) from t").fetchone()[0] == 3); con.close()

variante(s) utile(s)

import sqlite3
print(callable(sqlite3.Connection.executemany))

notes

  • Utilisez une transaction explicite pour de meilleures perfs.
  • Placeholders ? protègent des injections; ne formatez pas les valeurs dans SQL.