如果我跑
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'}])
我的代码出了什么问题?
顺便说一句,我已经意识到这个earlier question,但那里的答案没有帮助。答案 0 :(得分:2)
executemany
专门丢弃可能返回的任何结果集,这就是您获得异常的原因。
更多信息: http://initd.org/psycopg/docs/cursor.html#cursor.executemany