SQLite Python executemany () портится? "может выполнять только операторы DML" - PullRequest
0 голосов
/ 01 мая 2018

У меня есть запрос, который работает для execute, но в тот момент, когда я пытаюсь выполнить 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'}

Есть ли что-то очевидное, чего мне не хватает, или это похоже на более глубокую ошибку?

1 Ответ

0 голосов
/ 01 мая 2018

Вы не можете SELECT с executemany(). DML означает Data Modification Language, а 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...