psycopg2 executemany无法正常工作

时间:2014-06-29 00:41:31

标签: python postgresql psycopg2

如果我跑

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,但那里的答案没有帮助。

1 个答案:

答案 0 :(得分:2)

executemany专门丢弃可能返回的任何结果集,这就是您获得异常的原因。

更多信息: http://initd.org/psycopg/docs/cursor.html#cursor.executemany