SQLite python executemany()弄乱了吗? “只能执行DML语句”

时间:2018-05-01 20:24:38

标签: 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()

VS。

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 :(得分:1)

您不能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)))