执行SQL查询后cursor转列表调用len()返回值不正确是什么原因
问题原因
Python 标准 DB API 实现的数据库游标属于只能单次遍历的迭代器对象,内部维护了结果集读取指针,完整遍历一次后指针会停在结果集末尾,没有重置机制的前提下后续遍历都会返回空值。
对应你的代码执行逻辑:
- 第一次执行
print(list(cursor), "LIST")时,已经完整迭代游标拉取了所有查询结果,游标指针已经走到结果集末尾 - 后续的
for index1 in cursor、len(list(cursor))都是对已经耗尽的迭代器再次遍历,拿到的都是空列表,因此长度为0
修复方案
执行查询后直接将结果集一次性存入列表变量,后续所有操作都基于该列表变量处理即可,另外你当前直接拼接SQL字符串的写法存在SQL注入风险,建议改用参数化查询:
id = "123" # connecting to database # initializing cursor # 不同数据库驱动的参数占位符可能为%s/?等,按需调整即可 cursor.execute("select id from table where id = %s", (id,)) # 一次性读取所有结果存为列表,后续仅操作该变量 result = list(cursor) print(result, "LIST") for index1 in result: print(index1) print(len(result), "LENGTH") if len(result) != 1: print("not one id")
内容的提问来源于stack exchange,提问作者oss
相关产品推荐
相关产品推荐

