插入回车"the last operation didn't produce a result"



对于以下代码:

with psycopg.connect(host="host_name", dbname="db_name", user="user", password="pass") as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM table_name")
res = cur.fetchall()
print(res)

一切正常,但如果我试图通过替换

插入值
cur.execute("SELECT * FROM table_name")

cur.execute("INSERT INTO table_name (column_1, column_2) VALUES (%s, %s)", ("a","b"))

我得到以下错误"最后一次操作没有产生结果"是什么引起的?

有两种处理方法:

import psycopg2
con = psycopg2.connect(database="test", host='localhost', user='postgres')
cur = con.cursor()
cur.execute("insert into animals values(24, 'fair', 'cat')")
cur.rowcount
1
cur.execute("insert into animals values(34, 'good', 'dog') returning id")
cur.fetchone()
(34,)

第一种方法返回每个Cursor操作所影响的行数。

第二种方法返回id字段,因此实际上有一个结果。

对于插入操作,res = cur.fetchall()是冗余的。这里的错误代码是不言自明的。

try:
cur.execute("INSERT INTO table_name (column_1, column_2) VALUES (%s, %s)", ("a","b"))
except:
print('error')

游标是可迭代的对象,所以,如果你有多个产生多个结果的执行操作,你应该在消费结果时遍历游标对象,像这样:for record in cursor:,而不仅仅是一次,这将抛出一个异常。您还可以在每次结果执行操作之后消费,例如cur.fetchone()cur.commit()在每次无结果执行之后消费。

相关内容