我有一个适用于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'}

有什么明显的我想念的东西吗?还是像一个更深的错误?

最佳答案

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

关于python - SQLite python executemany()搞砸了吗? “只能执行DML语句”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50123318/

10-10 10:44