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

如何在Python中打印SQLite查询结果?附数据库查看及代码问题

问题分析与解决方案

一、为什么打印结果是None?

首先得明确:你执行的INSERT是数据插入操作,不是查询语句,而cur.fetchone()是用来获取SELECT这类查询语句的返回结果的——插入操作本身不会返回数据,所以调用它自然会得到None,这是正常的,但你的代码还有其他问题导致数据根本没真正保存到数据库里。

二、你的代码里的核心问题

我帮你梳理几个必须修正的点:

  1. 事务没提交:你把con.commit()注释掉了!SQLite默认需要手动提交事务,不然插入的数据只会停留在内存里,关闭连接后就彻底消失了,等于白插。
  2. 重复创建表报错:每次点"write"按钮都会执行CREATE TABLE jetfighter(...),如果表已经存在,直接就会抛出错误,得改成CREATE TABLE IF NOT EXISTS jetfighter(...),这样只有表不存在时才创建。
  3. 验证方式错了:要确认数据是否插入成功,得执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:40