如何使用TKINTER条目从Python中的SQLITE数据库中删除,而不是说明字符串或值



我正在尝试使用以下行删除我的sqlite数据库中的一行:

conn = sqlite3.connect('test.db')
c = conn.cursor()
memID = str(idBox.get())
#c.execute('DELETE FROM Test WHERE memberID = idBox.get()')

所以我试图使用TKINTER条目(IDBox)从表中删除,但获取以下错误:

tkinter回调中的例外Trackback(最近的最新电话): 文件" C: Program Files Python36 lib tkinter__init__。py",第1699行,in call 返回self.func(*args) 文件" i:/onedrive/pycharmprojects/tkinter/mainprogram/main.py",第36行,在delete_data_entry中 C.Execute('从测试中删除where memberId = idbox.get()')sqlite3.erationalerror:接近"(":语法错误

我已经陷入了相当长的一段时间,并感谢您的帮助

更多代码(创建成员变量):

memberid = str(uuid.uuid4())
print(memberid[0:8])
c.execute("INSERT INTO Test(memberID, fullname, username, password) VALUES (?, ?, ?, ?)",
          (memberid[0:8], fullnameBox.get(), usernameBox.get(), passwordBox.get()))
conn.commit()

考虑@philip金发和语法的评论

c.execute('DELETE FROM Test WHERE memberID = ' + memID)

问题在于您正在传递44ba195d,因为memberID和SQLite期望其他东西,也许是整数。这个

DELETE FROM Test WHERE memberID = 44ba195d

如果成员为整数,将导致

promationatiatiatiationalror:未被认可的令牌" 44ba195d"

检查您从idBox获得的内容。

编辑:由于您使用uuid作为会员ID,因此必须将SQL语句更改为

c.execute("DELETE FROM Test WHERE memberID = '" + memID + "'")

如果数据类型不是整数,则必须在引号中。

警告:请记住,这些SQL句子容易受到SQL注入的影响。您切勿使用字符串串联( )或字符串参数插值(%)将变量传递到SQL查询字符串。一个人可以输入' OR memberID LIKE '%1%并删除所有行,其中会员In成员包含值1。

最新更新