【发布时间】:2021-09-23 04:20:44
【问题描述】:
我正在尝试在 tkinter 中从 sql 表创建搜索功能。
for konto in sql_konto_search(db_file, "kontoplan", keywords):
tv.insert('', tk.END, values=((konto[konto_q][0], konto[konto_q][1]), konto[konto_q][2]), tags=('fg', 'fs', 'bg', 'anch'))
konto_q += 1
if not keywords:
tv.delete(*tv.get_children())
tv_index()
这是我的 SQL 代码(函数)。我正在尝试创建一个正在搜索多个关键字的查询 - 但效果不佳。
def sql_konto_search(db_file, table, keywords):
keywords_split = keywords.split()
keywords_list = []
for keyword in keywords_split:
keywords_list.append(keyword)
ant_que = len(keywords_list)
keywords_list = tuple(keywords_list)
try:
rows = []
conn = sqlite3.connect(db_file)
cur = conn.cursor()
xq = 0
for ant_q in range(ant_que):
cur.execute(f"SELECT konto, konto_t, beskrivelse FROM {table} WHERE konto_t LIKE ('%{keywords_list[xq]}%') OR beskrivelse LIKE ('%{keywords[xq]}%')")
xq += 1
rows.append(cur.fetchall())
return rows
except Error as e:
print(e)
如您所见,“关键字”是用户输入的关键字——我想搜索每个单词。 有什么建议吗?
【问题讨论】:
-
不要使用 f-strings 来编写查询!这会使您的程序容易受到 SQL 注入攻击。
-
所以当你输入的时候,你会搜索?
-
是的@Sujay,但每个空格 ( ) 都会返回一个新关键字。
-
.strip()被使用