提问人:AaA 提问时间:10/25/2023 最后编辑:XMehdi01AaA 更新时间:10/26/2023 访问量:52
Python 消息框异常处理
Python messagebox exception handling
问:
我一直在使用 sqlite3 开发一个 python 项目,它允许用户更新、删除和搜索数据库中的数据。对于选择过程,要求用户根据要进行选择的列名从数据库表中选择列名。我正在选择列并键入要搜索的值,但程序消息框显示异常错误。数据库名称为 。criminal_records
我应该如何更新代码以应对异常?
def search_data(self):
if self.var_search.get()=="":
messagebox.showerror('Error','Please enter a search term')
else:
try:
conn=sqlite3.connect('criminal_records.db')
my_cursor=conn.cursor()
my_cursor.execute("SELECT * FROM criminal_records WHERE "+str(self.var_com_search.get())+" LIKE '%"+str(self.var_search.get()+"'%"))
rows=my_cursor.fetchall()
if len(rows)!= 0:
self.criminal_table.delete(*self.criminal_table.get_children())
for i in rows:
self.criminal_table.insert('',END,values=i)
conn.commit()
conn.close()
except Exception as es:
messagebox.showerror('Error',f'Due to{str(es)}')
答:
0赞
acw1668
10/26/2023
#1
如果将最终的 SQL 语句保存到变量中并打印出来:
sql = "SELECT * FROM criminal_records WHERE "+str(self.var_com_search.get())+" LIKE '%"+str(self.var_search.get()+"'%")
print(sql)
您将获得(基于您提供的图像):
SELECT * FROM criminal_records WHERE Case ID LIKE '%12789250'%
上面的 SQL 语句有两个问题:
- 列名不带引号
Case ID
- last 不在单引号字符串内
%
最好对搜索字符串使用占位符(请注意,不能在列名上使用占位符),并将列名嵌入双引号内:
sql = f"""SELECT * FROM criminal_records WHERE "{self.var_com_search.get()}" LIKE ?"""
my_cursor.execute(sql, (f"%{self.var_search.get()}%",))
请注意,的值来自组合框小部件的预定义值,这不会导致 SQL 注入。self.var_com_search
评论
0赞
AaA
10/26/2023
非常感谢您的帮助!我能够修复代码,现在运行平稳。
评论
my_cursor.execute("SELECT * FROM criminal_records WHERE ? LIKE '%?'%", (self.var_com_search.get(), self.var_search.get()))
%
'
'%?%'