Python操作SQLite3数据库插入数据后查询返回空列表如何解决?
Python操作SQLite3插入查询无数据问题解决方案
核心错误点
你提供的代码存在一个显性致命错误:final_crtb_func 函数中,执行conn.close()关闭数据库连接后,又尝试执行c = conn.cursor()创建游标,这行代码必然抛出数据库连接已关闭的异常。如果你的UI框架默认吞掉了异常,你会误以为插入逻辑已经完整执行,实际后续绑定的逻辑可能被中断。
分步排查方案
- 删除
final_crtb_func最后一行无效代码c = conn.cursor(),避免异常打断逻辑。 - 验证输入值有效性:在执行插入语句前添加
print("待插入内容:", repr(inbox_entry.get())),确认输入框能正常拿到非空值,避免插入空值误以为插入失败。 - 验证插入执行结果:在
conn.commit()前添加print("插入影响行数:", c.rowcount),正常插入成功会返回1,返回0则说明插入语句未生效。 - 确认数据库路径一致性:在所有
sqlite3.connect()代码前添加路径打印,确认插入和查询操作连接的是同一个数据库文件,避免因运行工作目录不同,在不同位置生成多个同名数据库,导致插入和查询的不是同一个库:
import os print("当前连接的数据库路径:", os.path.abspath("tasks_database.db"))
- 补充查询提交逻辑:部分版本的sqlite3驱动存在查询未提交导致读不到最新数据的问题,可在
query_func的cursor.execute执行查询后添加connect.commit()再拉取数据。 - 插入后即时验证:在
final_crtb_func插入逻辑执行完成后直接调用query_func(),如果此时能查到记录,说明你之前调用查询的时机早于插入操作。
修复后参考代码
import sqlite3 import os # 初始化建表逻辑 conn = sqlite3.connect("tasks_database.db") c = conn.cursor() c.execute("""CREATE TABLE IF NOT EXISTS tasks ( task_name text )""") conn.commit() conn.close() def query_func(): connect = sqlite3.connect("tasks_database.db") print("查询连接的库路径:", os.path.abspath("tasks_database.db")) cursor = connect.cursor() cursor.execute("SELECT *, oid FROM tasks ") connect.commit() records = cursor.fetchall() print("查询结果:", records) connect.close() def final_crtb_func(): print("提交按钮触发") crtb_func() # 你的原有其他逻辑,保留即可 conn = sqlite3.connect("tasks_database.db") print("插入连接的库路径:", os.path.abspath("tasks_database.db")) c = conn.cursor() task_val = inbox_entry.get() print("待插入内容:", repr(task_val)) c.execute("INSERT INTO tasks VALUES (:task_name)", {"task_name": task_val}) print("插入影响行数:", c.rowcount) conn.commit() conn.close() # 插入完成可直接调用查询验证 query_func()
内容的提问来源于stack exchange,提问作者Mark George
相关产品推荐
相关产品推荐

