无法使用 python 和 mysql 过滤搜索
Not Working filter search using python and mysql
写入 1 后显示没有记录。我的数据库中有 1 的数据。有人可以帮我知道我哪里错了吗?
def searchDB():
try:
sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase")
cur =sqlCon.cursor ()
cur.execute ("select categoryname from category where "+ str(searchby.get())+ "Like '%" + str(search.get()) + "Like '%'")
result = cur.fetchall ()
if len(result) !=0:
self.category_records.delete(*self.category_records.get_children())
for row in result:
self.category_records.insert('',END,values =row)
sqlCon.commit()
sqlCon.close()
except:
tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
Reset()
sqlCon.close()
您在查询中的 str(search.get())
之后有一个额外的 Like
。因此,如果用户键入 foo
,它将搜索不存在的 fooLike
。
您还缺少第一个 LIKE
之前的 space。
您不应该将搜索字符串直接连接到查询中,这对 SQL 注入是开放的。您应该在查询中使用参数。
cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)
无需围绕这些 .get()
调用调用 str()
,因为您是从文本变量中获取的。
对于测试长度的 if
,您应该显示有关在 else:
中找不到匹配结果的消息。 except:
仅在出现错误时运行。
def searchDB():
try:
sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase")
cur =sqlCon.cursor ()
cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)
result = cur.fetchall ()
if len(result) !=0:
self.category_records.delete(*self.category_records.get_children())
for row in result:
self.category_records.insert('',END,values =row)
else:
tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
Reset()
sqlCon.commit()
except Exception as e:
tkinter.messagebox.showinfo("Data Search Form", "Error during search " + str(e))
Reset()
sqlCon.close()
写入 1 后显示没有记录。我的数据库中有 1 的数据。有人可以帮我知道我哪里错了吗?
def searchDB():
try:
sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase")
cur =sqlCon.cursor ()
cur.execute ("select categoryname from category where "+ str(searchby.get())+ "Like '%" + str(search.get()) + "Like '%'")
result = cur.fetchall ()
if len(result) !=0:
self.category_records.delete(*self.category_records.get_children())
for row in result:
self.category_records.insert('',END,values =row)
sqlCon.commit()
sqlCon.close()
except:
tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
Reset()
sqlCon.close()
您在查询中的 str(search.get())
之后有一个额外的 Like
。因此,如果用户键入 foo
,它将搜索不存在的 fooLike
。
您还缺少第一个 LIKE
之前的 space。
您不应该将搜索字符串直接连接到查询中,这对 SQL 注入是开放的。您应该在查询中使用参数。
cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)
无需围绕这些 .get()
调用调用 str()
,因为您是从文本变量中获取的。
对于测试长度的 if
,您应该显示有关在 else:
中找不到匹配结果的消息。 except:
仅在出现错误时运行。
def searchDB():
try:
sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase")
cur =sqlCon.cursor ()
cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)
result = cur.fetchall ()
if len(result) !=0:
self.category_records.delete(*self.category_records.get_children())
for row in result:
self.category_records.insert('',END,values =row)
else:
tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
Reset()
sqlCon.commit()
except Exception as e:
tkinter.messagebox.showinfo("Data Search Form", "Error during search " + str(e))
Reset()
sqlCon.close()