使用:
Python3
SQLite的
使用TKinter
我目前正在尝试创建一个在数据库中搜索关键字的函数,但是一旦我尝试将它与TKinter结合起来,它似乎就失败了。
以下是相关行: (我尝试了很多不同的方法,下面的3行似乎与变量一起使用,但不是TKinter的输入,所以我认为它们实际上可以工作,如果我稍微编辑它们。
我得到的问题是,我在TKinter和SQLite中没有经验,并且已经和那些2人一起工作了大约3天。
def searcher(column):
#Getting input from user (TKinter)
keyword = tk.Entry(self)
keyword.pack()
#Assigning the input to a variable
kword = keyword.get()
c.execute("SELECT * FROM my_lib WHERE {kappa} LIKE {%goal%}".format(kappa=column, goal=kword))
#c.execute("SELECT * FROM my_lib WHERE "+column+"=?", (kword,))
#c.execute("SELECT * FROM my_lib WHERE {} LIKE '%kword%'".format(column))
我想检查是否有任何数据包含关键字,所以基本上:
k_word in column_data
而不是
column_data == k_word
我的问题是:
有没有办法获取用户输入(通过TKinter)并在数据库(SQLite)中搜索并检查数据库中的任何数据是否包含关键字
答案 0 :(得分:1)
SQLite文档解释了您可以在查询字符串中使用?
作为占位符,这样您就可以替换值的元组。他们还建议反对使用Python的字符串操作(如下所述)使用变量组装完整查询:
c.execute("SELECT * FROM my_lib WHERE ? LIKE ?", (column, '%'+kword+'%'))
您可以在上面看到我将%
与kword
连接起来,这将被替换为第二个?
。这也是安全的,这意味着它可以在需要时防止SQL注入攻击。
答案 1 :(得分:0)
经过一遍又一遍的尝试,我得到了实际的解决方案。好像我不能只是添加'%'变量就像一个字符串,而是:
c.execute("SELECT * FROM my_lib WHERE {} LIKE '%{}%'".format(column, kword))