psycopg2 的 executemany 不工作
如果我运行
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