删除在 Psycopg2 中什么都不返回?

Fak*_*ame 3 postgresql postgresql-9.3

我在 PostgreSQL 数据库中有一个相当简单的删除查询,我通过psycopg2.

以以下最小示例为例:

def testDelete():
    db = DbInterface()
    cur = db.conn.cursor()
    cur.execute("DELETE FROM munamelist WHERE name='something'")
    print("Results = ", cur.fetchall())
Run Code Online (Sandbox Code Playgroud)

基本上,PostgreSQL 的文档DELETE说明:

成功完成后,DELETE 命令返回一个命令标签的形式

DELETE count

计数是删除的行数。请注意,当删除被 BEFORE DELETE 触发器抑制时,该数字可能小于与条件匹配的行数。如果 count 为 0,则查询未删除任何行(这不被视为错误)。

但是,psycopg2当您尝试获取查询结果时会引发错误:

Traceback (most recent call last):
  File "autoOrganize.py", line 370, in <module>
    parseCommandLine()
  File "autoOrganize.py", line 363, in parseCommandLine
    testDelete()
  File "autoOrganize.py", line 247, in testDelete
    print("Results = ", cur.fetchall())
psycopg2.ProgrammingError: no results to fetch
Run Code Online (Sandbox Code Playgroud)

该项目是否存在并不重要,您无法获取查询结果。不psycopg2为 SQL 返回“命令标签”?

如果没有,我如何检索控制台界面中返回的更改行数?没关系,显然cursor.rowcount是最后一个DML/DQL语句中修改的行数。

Cra*_*ger 5

DELETE没有RETURNING不返回结果集。所以你不能用fetch...它调用,比如cursor.fetchall().

受影响的行数存储在cursor.rowcountDML 中。