对于以下代码:
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"))
我得到以下错误“上次操作没有产生结果”是什么原因造成的?
3条答案
按热度按时间htzpubme1#
有两种方法来处理这个问题:
第一种方法返回每个Cursor受操作影响的行数。
第二种方法返回
id
字段,因此实际上有一个结果。jobtbby32#
在插入操作的情况下,
res = cur.fetchall()
是冗余的。这里的错误代码是不言自明的。n3h0vuf23#
游标是可迭代的对象,因此,如果您有多个执行操作产生多个结果,则在使用结果时应迭代Cursor对象,如下所示:
for record in cursor:
,而不是一次,这将抛出异常。您还可以在每个结果执行操作之后进行消费,例如cur.fetchone()
和cur.commit()
。