SQLite python executemany() 搞砸了吗? "can only execute DML statements"
SQLite python executemany() messing up? "can only execute DML statements"
我有一个适用于执行的查询,但是当我尝试执行 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代表Data Modification Language,一个SELECT
不算是modfication.
您需要做的可能是遍历数据:
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)))
我有一个适用于执行的查询,但是当我尝试执行 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代表Data Modification Language,一个SELECT
不算是modfication.
您需要做的可能是遍历数据:
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)))