python - SQLite python executemany() 搞砸了? "can only execute DML statements"

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

对比
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'}
是否有明显的我遗漏的东西,或者这是一个更深层次的错误?

最佳答案

你不能 SELECTexecutemany() 。 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)))

关于python - SQLite python executemany() 搞砸了? "can only execute DML statements",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123318/

相关文章:

Python compiler call another python compiler to execute a script(从一台独立机器到另一台机器执行脚本)

python - 为什么 azure 应用程序服务 django 部署不断失败?

python - 无法通过迭代器设置数组值

java - 删除时权限不足

javascript - Transcrypt 和 .mod.js 文件

android - SQLite 查询返回空

c++ - Qt SQLite 无法执行 Select 查询

ios - 在 SWIFT 中使用 FMDB 访问外部数据库

Mysql分区对DDL和DML的影响

database - 如何将数据从 wavemaker 插入数据库