psycopg2 的 executemany 不工作

1 投票
1 回答
2476 浏览
提问于 2025-04-18 11:27

如果我运行

cur.execute('SELECT * FROM some_table WHERE some_column = %s;', ('some_value',))

那么紧接着调用 cur.fetchall() 就能成功,并且输出的结果和我在 psql 中运行以下代码时得到的结果完全一致:

some_db=> SELECT * FROM some_table WHERE some_column = 'some_value';

但是如果我运行

cur.executemany('SELECT * FROM some_table WHERE some_column = %s;',
                [('some_value',)])

...这基本上和之前的 cur.execute(...) 语句是一样的,接下来的 cur.fetchall() 调用却引发了一个异常

ProgrammingError: no results to fetch

如果我在调用 executemany 时传入的第二个参数是多个条目,我也会遇到同样的异常:

cur.executemany('SELECT * FROM some_table WHERE some_column = %s;',
                [('some_value',), ('some_other_value',)])

...或者如果我使用 pyformat 风格来传递参数

cur.executemany('SELECT * FROM some_table WHERE some_column = %(v)s;',
                [{'v': 'some_value'}, {'v': 'some_other_value'}])

我的代码到底出了什么问题?

顺便说一下,我知道这个之前的问题,但那里的回答对我没有帮助。

1 个回答

2

executemany 这个方法会特别忽略任何可能返回的结果集,这就是你遇到异常的原因。

更多信息可以查看这里: http://initd.org/psycopg/docs/cursor.html#cursor.executemany

撰写回答