SQLite python executemany() 搞砸了?“只能执行 DML 语句”

use*_*472 3 python sqlite dml

我有一个适用于执行的查询,但是当我尝试 executemany() 时,我收到一个奇怪的错误说 ProgrammingError: executemany() can only execute DML statements.

查询如下所示:

c.execute("SELECT * FROM Donors WHERE firstname=:First AND lastname=:Last",ds[1].donor).fetchall()
Run Code Online (Sandbox Code Playgroud)

对比

c.executemany("SELECT * FROM Donors WHERE firstname=:First AND lastname=:Last",[ds[1].donor,ds[2].donor]).fetchall()
Run Code Online (Sandbox Code Playgroud)

ds[i].donor 的样子 {'First': 'Cathy', 'Last': 'Lee'}

是否有明显的我遗漏的东西,或者这是一个更深层次的错误?

Oli*_*ann 5

你不能SELECTexecutemany(). DML 代表数据修改语言,aSELECT不被视为修改。

您要做的可能是遍历数据:

for d in donors:
    cursor.execute("""
                   SELECT * FROM Donors
                   WHERE firstname=:First AND lastname=:Last
                   """, d.donor)
    print(cur.fetchall())
Run Code Online (Sandbox Code Playgroud)

编辑我还无法弄清楚使其可复制粘贴:您还可以使用该IN(...)操作,这应该是以下几行:

cur.execute("""
            SELECT * FROM Donors
            WHERE firstname IN ({0})"""
            .format(', '.join(x.donor for x in donors)))
Run Code Online (Sandbox Code Playgroud)