You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:06:03