Ich möchte eine SQL-Anweisung wie diese ausführen:
SELECT * FROM table WHERE spam LIKE ? AND eggs LIKE :eggs
Die Dokumentation des Python-Moduls sqlite3 sagt:
Cursor.execute(sql[, Parameter])
[...]
Das Modul sqlite3 unterstützt zwei Arten von Platzhaltern: Fragezeichen (qmark style) und benannte Platzhalter (named style).
Aber gibt es eine Möglichkeit, sowohl qmark style als auch named style zu verwenden?
LÖSUNG (Dank an jadkik94):
params = ["a","b","c"]
kparams = {'d':"d", 'e':"e"}
sql = "SELECT * FROM table WHERE (a LIKE ? OR b LIKE ? OR c LIKE ?) AND (d LIKE :d AND e LIKE :e)"
sql = sql.replace("?", ":{}").format(*range(sql.count("?")))
# >>> sql
# "SELECT * FROM table WHERE (a like :0 OR b like :1 OR c like :2) AND (d like :d AND e like :e)"
kparams.update(dict(map(lambda x: (str(x[0]), x[1]), enumerate(params))))
# >>> kparams
# {'0': 'a', '1': 'b', '2': 'c', 'd': 'd', 'e': 'e'}
c.execute(sql, kparams)