我在与 via 交互的 PostgreSQL 数据库中有一个相当简单的删除查询psycopg2
。
采取以下最小示例:
def testDelete():
db = DbInterface()
cur = db.conn.cursor()
cur.execute("DELETE FROM munamelist WHERE name='something'")
print("Results = ", cur.fetchall())
基本上,状态的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
无论该项目是否存在,您都无法获取查询结果。不psycopg2
返回 SQL 的“命令标签”?
如果没有,我如何检索控制台界面中返回的更改行数?没关系,显然是最后/语句cursor.rowcount
中修改的行数。DML
DQL
DELETE
withoutRETURNING
不返回结果集。所以你不能用fetch...
它来调用,比如cursor.fetchall()
.受影响的行数存储在
cursor.rowcount
DML 中。我想你追求的是:
当我使用
INSERT
时,这会正确打印INSERT 0 3
等。