У меня есть запрос, который работает для выполнения, но в тот момент, когда я пытаюсь выполнить executemany (), я получаю странную ошибку: ProgrammingError: executemany() can only execute DML statements.
Запрос выглядит так:
c.execute("SELECT * FROM Donors WHERE firstname=:First AND lastname=:Last",ds[1].donor).fetchall()
против.
c.executemany("SELECT * FROM Donors WHERE firstname=:First AND lastname=:Last",[ds[1].donor,ds[2].donor]).fetchall()
где ds [i] .donor выглядит как {'First': 'Cathy', 'Last': 'Lee'}
Есть ли что-то очевидное, что я упускаю, или это похоже на более глубокую ошибку?
Вы не можете SELECT
с executemany()
. DML означает язык данных Модификация, а SELECT
не рассматривается как модификация.
Что вам нужно сделать, это, вероятно, перебрать данные:
for d in donors:
cursor.execute("""
SELECT * FROM Donors
WHERE firstname=:First AND lastname=:Last
""", d.donor)
print(cur.fetchall())
Отредактируйте, что я еще не могу понять, чтобы сделать его копируемым:
Вы также можете использовать операцию IN(...)
, которая должна выглядеть примерно так:
cur.execute("""
SELECT * FROM Donors
WHERE firstname IN ({0})"""
.format(', '.join(x.donor for x in donors)))