Python操作Sqlite3执行查询后fetchall返回空列表问题
SQLite3 Python查询返回空列表修复方案
最高概率原因:游标调用逻辑错误
你代码中通过con.execute()执行查询,该方法会返回一个独立的临时游标对象,你提前创建的cursor变量从未执行过任何SQL语句,调用fetchall()自然返回空。
可任选一种方式修复:
- 使用已创建的游标执行查询
import sqlite3 con = sqlite3.connect("commands.db") cursor = con.cursor() # 用cursor实例执行SQL cursor.execute("SELECT * FROM commands;") existing = cursor.fetchall() print(existing)
- 直接接收
con.execute返回的游标取数据
import sqlite3 con = sqlite3.connect("commands.db") existing = con.execute("SELECT * FROM commands;").fetchall() print(existing)
次高概率原因:相对路径匹配错误
Python运行时的工作目录和commands.db实际存放目录不一致时,sqlite3.connect("commands.db")会自动在当前工作目录创建一个全新的空数据库,查询自然无结果。
可通过打印路径验证,建议直接使用绝对路径连接:
import os import sqlite3 # 生成数据库文件的绝对路径 db_abs_path = os.path.abspath("commands.db") # 打印路径确认是否和你实际存放的数据库路径一致 print("当前连接的数据库路径:", db_abs_path) con = sqlite3.connect(db_abs_path) cursor = con.cursor() cursor.execute("SELECT * FROM commands;") existing = cursor.fetchall() print(existing)
其他可能原因:数据未提交
如果插入数据的模块执行写入操作后未调用con.commit(),且插入数据的连接尚未关闭,未提交的数据仅对当前写入连接可见,你新建的查询连接无法读取到这部分数据。确认写入模块执行插入后调用commit()方法即可。
内容的提问来源于stack exchange,提问作者Null Pointer
相关产品推荐
相关产品推荐

