【问题标题】:psycopg2 executemany not workingpsycopg2 executemany 不工作
【发布时间】:2014-08-19 18:22:52
【问题描述】:

如果我跑步

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

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 2016-12-19
      • 2013-10-09
      • 2015-01-03
      • 2015-07-02
      • 2014-10-15
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多