我想清理使用 tkinter 中的 Treeview 创建的窗口中查询结果的格式(附图)
SQL查询使用pyodbc,相关的python位是:
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# Use parameterized query to avoid SQL injection
cursor.execute('''
SELECT First_Name,Name,Phone_1 FROM [Archive].[dbo].[Client_Tbl]
WHERE [Archive].[dbo].[Client_Tbl].First_Name = ? OR [Archive].[dbo].
[Client_Tbl].Name = ? OR [Archive].[dbo].[Client_Tbl].Phone_1 = ?
''', first_name, last_name, phone_number)
result = cursor.fetchall()
cursor.close()
conn.close()
return result
....
# Function to update the Treeview with query results
def display_results(results):
for i in tree.get_children():
tree.delete(i) # Clear existing entries in the treeview
for row in results:
tree.insert('', 'end', values=row) # Insert new entries into the
treeview
.....
# Results display (Treeview)
columns = ('First Name', 'Last Name', 'Phone Number')
tree = ttk.Treeview(frame, columns=columns, show='headings')
tree.heading('First Name', text='First Name')
tree.heading('Last Name', text='Last Name')
tree.heading('Phone Number', text='Phone Number')
tree.grid(row=3, column=0, sticky='nsew')
.....
有什么建议吗?
我尝试过使用元组,但我似乎无法让它正常工作。 (诚然,我对 Python 相当陌生)
我没有使用过 pyodbc,但正如您所附的图片所示,您直接插入从 pyodbc 检索的结果。
在这种情况下,我建议您首先将值解压到不同的变量中(当您开始使用 python 时),然后将它们插入树视图中。
如果您的结果变量包含如下元组:('Dale', 'Doe', 'XXXXXX'),只需尝试执行以下操作:
for row in results:
first_name, last_name, phone_number = row
tree.insert(parent='', index=0, values=[first_name, last_name, phone_number])
这有点矫枉过正,但正如我告诉你的,如果你对 python 不太有信心,它至少可以让你了解最相关的功能之一,即打包、解包变量。
非常重要的是,如果您的行实际上是元组,则这将起作用,您可以简单地检查执行此操作:
print(type(row))
顺便说一句,在最坏的情况下,如果实际类型不是元组或者是字符串,您可以通过两种方式进行操作,我没有使用过 pyodbc,但主要所有数据库框架的工作方式都非常相似,而且我非常有信心,如果您进行一点研究,您会发现某种光标可以获得更好的格式化行,或者至少更适合您想要的。
顺便说一句,在最糟糕的情况下,如果该行是一个像“('Dale', 'Doe', 'XXXXXX')”这样的字符串,你可以应用以下转换来清理字符串,至少只是开始练习中。
row = "('Dale', 'Doe', 'XXXXXX')"
first_name, last_name, phone_number = row.replace("(", "").replace(")", "").replace("'", "").split(",")
希望它可以帮助你:)。 快乐编码。