持续出现psycopg2.ProgrammingError: no results to fetch错误求助
解决psycopg2.ProgrammingError: no results to fetch错误
问题描述
- 通过
_rowcount = db_cursor_eb.rowcount获取到有12行记录,但执行fetchall()时触发psycopg2.ProgrammingError: no results to fetch错误 - 错误具体出现在
executequery方法的第131行,执行_row = db_cursor_eb.fetchone()时抛出
原因分析
- 游标已被提前消费:如果在调用
rowcount之前,已经执行过fetchone()、fetchall()或其他移动游标的操作,游标会指向结果集末尾,此时再调用fetchall()自然无法获取数据 - rowcount的不可靠性:psycopg2中
rowcount对于SELECT操作并非实时反映游标当前状态,它记录的是最后一次查询影响的行数,即便游标已被读取,该值可能仍保留之前的结果,导致和实际游标状态不一致
解决办法
重置游标位置:
若之前执行过读取游标的操作,可将游标重置到结果集开头后再读取:# 将游标重置到结果集起始位置 db_cursor_eb.scroll(0, mode='absolute') _lResultSet = db_cursor_eb.fetchall()也可以重新执行一次查询,确保游标处于初始状态。
直接通过结果集判断:
放弃依赖rowcount,直接调用fetchall()后判断结果是否为空:_lResultSet = db_cursor_eb.fetchall() if not _lResultSet: _lResultSet = "No record found" return _lResultSet规范游标使用:
每次执行查询后,确保从游标初始位置开始读取数据,不要在中间随意移动游标位置,避免出现游标状态和rowcount不匹配的情况
内容的提问来源于stack exchange,提问作者Rahul Neekhra
相关产品推荐
相关产品推荐

