如何在Python中打印SQLite查询结果?附数据库查看及代码问题
问题分析与解决方案
一、为什么打印结果是None?
首先得明确:你执行的INSERT是数据插入操作,不是查询语句,而cur.fetchone()是用来获取SELECT这类查询语句的返回结果的——插入操作本身不会返回数据,所以调用它自然会得到None,这是正常的,但你的代码还有其他问题导致数据根本没真正保存到数据库里。
二、你的代码里的核心问题
我帮你梳理几个必须修正的点:
- 事务没提交:你把
con.commit()注释掉了!SQLite默认需要手动提交事务,不然插入的数据只会停留在内存里,关闭连接后就彻底消失了,等于白插。 - 重复创建表报错:每次点"write"按钮都会执行
CREATE TABLE jetfighter(...),如果表已经存在,直接就会抛出错误,得改成CREATE TABLE IF NOT EXISTS jetfighter(...),这样只有表不存在时才创建。 - 验证方式错了:要确认数据是否插入成功,得执行
SELECT查询语句,而不是在INSERT后直接调用fetchone。
三、修正后的代码示例
import tkinter as tk import sqlite3 as lite import sys class GUI(tk.Frame): def __init__(self, master=None, **kwargs): tk.Frame.__init__(self, master, **kwargs) self.var = tk.StringVar() entry = tk.Entry(self, textvariable=self.var) entry.pack() btn = tk.Button(self, text='read', command=self.read_entry) btn.pack() btn = tk.Button(self, text='write', command=self.write_entry) btn.pack() def read_entry(self): # 读取数据库所有数据并打印 con = lite.connect('RandomThings.db') cur = con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS jetfighter(Name TEXT)") cur.execute("SELECT * FROM jetfighter") all_data = cur.fetchall() print("数据库中存储的所有数据:", all_data) cur.close() con.close() def write_entry(self): input_content = self.var.get() con = lite.connect('RandomThings.db') cur = con.cursor() # 避免重复创建表报错 cur.execute("CREATE TABLE IF NOT EXISTS jetfighter(Name TEXT)") cur.execute("INSERT INTO jetfighter VALUES (?)", (input_content,)) # 必须提交事务才能把数据写入硬盘 con.commit() # 插入后查询验证 cur.execute("SELECT * FROM jetfighter WHERE Name = ?", (input_content,)) inserted_item = cur.fetchone() print("刚成功插入的数据:", inserted_item) cur.close() con.close() def main(): root = tk.Tk() root.geometry('200x200') win = GUI(root) win.pack() root.mainloop() if __name__ == '__main__': main()
四、能不能用Microsoft Word或LibreOffice打开SQLite数据库?
不行哦,Word和LibreOffice是处理文档格式的工具,SQLite数据库是二进制格式的文件,它们没法正确解析。你可以用这些工具查看数据库内容:
- SQLite命令行工具:打开终端/命令提示符,输入
sqlite3 RandomThings.db,再执行SELECT * FROM jetfighter;就能查看数据。 - 可视化工具:比如DB Browser for SQLite、SQLiteStudio,都是免费的可视化工具,能直观地查看、编辑数据库内容。
- 编程验证:就像上面修正后的
read_entry函数那样,用代码查询并打印数据。
内容的提问来源于stack exchange,提问作者Formula 1
相关产品推荐
相关产品推荐

