首页 > 解决方案 > 如何在 python 中打印 SQLite 查询的结果?

问题描述

我正在尝试打印此 SQLite 查询的结果,以检查它是否已将数据存储在数据库中。目前它只打印无。有没有办法在 Microsoft Word 或 LibreOffice 等程序中打开数据库。只是看它是否已将内容保存到数据库中。

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):
    #print(self.var.get())

def write_entry(self):
    self.var.set(self.var.get())
    con = lite.connect('RandomThings.db')
    cur = con.cursor()
    cur.execute("CREATE TABLE jetfighter(Name TEXT)")
    cur.execute("INSERT INTO jetfighter VALUES (?)", (self.var.get(),))
    #con.commit()
    print (cur.fetchone())
    cur.close()

def main():
    root = tk.Tk()
    root.geometry('200x200')
    win = GUI(root)
    win.pack()
    root.mainloop()

if __name__ == '__main__':
    main()

谢谢你帮我解决我的问题。

标签: pythontkintersqlite

解决方案


只有SELECT查询有行集。1因此,如果您想查看刚刚插入的行,则需要查看SELECT该行。

准确选择刚刚插入的行的一种方法是使用rowid伪列。该列具有由数据库自动生成的唯一值,并且每条INSERT语句都会更新lastrowid游标上的一个属性。所以:

cur.execute("INSERT INTO jetfighter VALUES (?)", (self.var.get(),))
cur.execute("SELECT * FROM jetfighter WHERE rowid=?", (cur.lastrowid,))
print(cur.fetchone())

这将打印出如下内容:

('Starfighter F-104G',)

推荐阅读