Python中sqlite3 Cursor对象返回非预期结果问题求助
解决Python sqlite3查询仅返回游标对象的问题
嘿,我明白你的困惑了!你在Python里执行execute()后得到的只是游标对象,它并没有直接返回查询结果——这和sqlite3命令行工具自动展示结果的行为不一样。咱们一步步来解决这个问题:
问题根源
当你调用c.execute()时,Python的sqlite3模块只是执行了SQL语句,并让游标指向了结果集的位置,但不会主动把结果返回给你。你需要显式调用游标上的方法来提取数据。
修正后的代码示例
这里给你调整后的代码,同时还优化了查询的安全性和兼容性(比如处理带???的字符串类型号码):
import sqlite3 cti = '/home/user/test/cti.db' conn = sqlite3.connect(cti) c = conn.cursor() # 推荐用参数化查询,既处理类型匹配,又避免SQL注入 # 把电话号码作为字符串参数传入,适配列的字符串类型 c.execute('select * from ani_table_1 where number = ?', ('9545551212',)) # 获取结果:用fetchone()拿第一条匹配结果,fetchall()拿所有结果 result = c.fetchone() # 如果需要所有结果,就换成:result = c.fetchall() print(result) # 现在就能看到你想要的查询结果了 # 记得关闭连接,释放资源 conn.close()
额外注意事项
- 类型匹配:你的号码列里有
???5551212这种格式,说明该列应该是字符串类型。如果直接写where number = 9545551212(数字),sqlite3会做隐式类型转换,可能导致匹配异常。用参数化查询传入字符串,能保证类型完全匹配。 - 游标方法说明:
fetchone():返回结果集中的下一条记录,没有结果时返回Nonefetchall():返回结果集中的所有记录,是一个列表fetchmany(n):返回指定数量的记录
这样调整后,你就能在Python里拿到和sqlite3命令行里一样的查询结果啦!
内容的提问来源于stack exchange,提问作者djabe
相关产品推荐
相关产品推荐

