Python 链接tkinter和sqlite3
我是一名新的python程序员,在使用tkinter和sqlite3创建电话簿应用程序时遇到了一个问题。应用程序运行时没有问题,但不会插入或删除数据,尽管它打印(插入成功)并删除成功)。谢谢你的帮助。代码如下,请提前感谢:Python 链接tkinter和sqlite3,python,sqlite,tkinter,Python,Sqlite,Tkinter,我是一名新的python程序员,在使用tkinter和sqlite3创建电话簿应用程序时遇到了一个问题。应用程序运行时没有问题,但不会插入或删除数据,尽管它打印(插入成功)并删除成功)。谢谢你的帮助。代码如下,请提前感谢: from tkinter import* import tkinter as tk from tkinter import ttk import sqlite3 class Phonebook2: def __init__(self, master): l
from tkinter import*
import tkinter as tk
from tkinter import ttk
import sqlite3
class Phonebook2:
def __init__(self, master):
lblName = ttk.Label(top, text="Name:")
lblName.grid(row = 0, column = 0, sticky=W)
lblPhone = ttk.Label(top, text="Phone number:")
lblPhone.grid(row=1, column=0, sticky=W)
self.name= StringVar()
self.txtName = Entry(top, textvariable=self.name)
self.txtName.grid(row=0, column=1, padx=0, pady=0, sticky=EW, columnspan=19)
self.num= IntVar()
self.txtPhone = Entry(top, textvariable=self.num)
self.txtPhone.grid(row=1, column=1, sticky=EW)
btnAdd = ttk.Button(top, text="Add", command=self.insert)
btnAdd.grid(row=0, column=20, sticky=EW, padx=2, pady=2)
btnDelete = ttk.Button(top, text="Delete", command=self.delete)
btnDelete.grid(row=1, column=20, sticky=EW, padx=2)
btnClear = ttk.Button(top, text="Clear", command=self.clear)
btnClear.grid(row=2, column=20, sticky=EW, padx=2)
btnSearch = ttk.Button(top, text="Search")
btnSearch.grid(row=3, column=20, sticky=EW, padx=2)
btnExit = ttk.Button(top, text="Exit", command = exit)
btnExit.grid(row=4, column=20)
def exit(self):
top.destroy()
def insert(self):
NM = self.txtName.get()
PH = self.txtPhone.get()
conn = sqlite3.connect ('Phonebook.db')
print ("connection opened for insertion...")
cursor = conn.cursor()
cursor.execute ("""INSERT INTO Phonebook (NAME, PHONE_NUMBER) VALUES (?, ?)""", (NM, PH))
conn.commit()
conn.close()
print ('Inserted successfully')
def delete(self):
conn = sqlite3.connect('Phonebook.db')
print ("Connection opened for deletion...")
cursor = conn.cursor()
cursor.execute ("DELETE FROM Phonebook")
conn.commit()
conn.close()
print ("All records are deleted successfully...")
def clear(self):
self.txtName.delete(0, END)
self.txtPhone.delete(0, END)
top = Tk()
top.overrideredirect(True)
top.eval('tk::PlaceWindow . center')
top.title("PhoneBook2")
application = Phonebook2(top)
top.mainloop()
您可以尝试这样插入:
query = ("INSERT INTO Phonebook (NAME, PHONE_NUMBER)""VALUES (%s, %s)")
data = (NM,PH)
cursor.execute(query, data)
connection.commit()
确保在sqlite中获得“NAME”和“PHONE_NUMBER”列的正确名称def delu something():
conn=sqlite3.connect(“Phonebook.db”)
cur=连接光标()
cur.execute(“DELETE FROM phonebook WHERE oid=“+del_ent.get())#您的SQL语句似乎正常。您在控制台或终端中是否有任何错误?还发布了“Phonebook.db”的架构。在我在数据库中创建Phonebook表后,插入对我来说很有效。您在“删除”中忘记了条目。get()
和sqlWHERE
。(如果要删除特定项)sqlite3使用?
作为占位符,而不是%s
。您可以更改oid
。这只是一个示例,您是否注意到delete()
中的OP消息是“所有记录均已成功删除…”?这意味着OP希望删除表中的所有记录。尽管如此,输入没有经过消毒。因此我不知道这是否正常,我从这里得到了信息:(6分钟和14:50),它对我有效。这与oid只是一个例子。你可以用其他任何东西来改变它。嗯,你可能不应该关注那里的视频,那样做是非常糟糕的。您的查询易于SQL注入。它应该是cur.execute(“从电话簿中删除,其中oid=?”,(del_ent.get(),)