从 Python tkinter Treeview 中的 SQL 查询中删除引号和括号

问题描述 投票:0回答:1

我想清理使用 tkinter 中的 Treeview 创建的窗口中查询结果的格式(附图)

Output Sample

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 相当陌生)

python tkinter treeview pyodbc
1个回答
0
投票

我没有使用过 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(",")

希望它可以帮助你:)。 快乐编码。

© www.soinside.com 2019 - 2024. All rights reserved.