Чтобы использовать dict для вставок, вы ищете драйвер БД, который поддерживает "именованный" (заполнитель) paramstyle (в ссылке ищите "paramstyle"):
Из документов sqlite3 :
import sqlite3
con = sqlite3.connect("mydb")
cur = con.cursor()
who = "Yeltsin"
age = 72
cur.execute("select name_last, age from people where name_last=:who and age=:age",
{"who": who, "age": age})
print cur.fetchone()
К сожалению, для MySQL два основных драйвера, MySQLdb и oursql , не поддерживают "именованный" paramstyle. MySQLdb использует paramstyle "format" (используя '% s'), а oursql использует paramstyle "qmark" (используя "?"). Оба этих параметра требуют, чтобы вы поставили list
вместо dict
аргументов:
x={'bar':1.0,'baz':2.0}
sql='INSERT INTO foo (bar,baz) VALUES (?,?)'
cur.execute(sql,[x['bar'],x['baz']])
Кстати, если вам нужен драйвер для соединения с MySQL, используйте oursql .
MySQLdb исторически был основным драйвером взаимодействия Python-MySQL, но этот драйвер использует regex для манипулирования вашим SQL и аргументами в одну строку в кавычках, которая затем отправляется в MySQL. Напротив, oursql использует подготовленные операторы, отправляет SQL и аргументы отдельно, , избегая необходимости экранирования данных . Путь oursql является правильным и позволяет избежать определенных ошибок , которые преследуют MySQLdb.