如何在python中打印SQLite查询的结果?

时间:2018-05-30 21:10:20

标签: python tkinter 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()

感谢您帮助解决我的问题。

2 个答案:

答案 0 :(得分:1)

只有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',)

答案 1 :(得分:0)

Fetchone只会在查询后生成内容。 INSERT之后,添加

cur.execute("SELECT * FROM jetfighter")
print(cur.fetchone())