0

没有起搏器的 sqlite3(Python)中的 Select 语句工作正常,但与起搏器(?)

在下面的代码中,当我在选择中使用“table_column_name”时,我将列表中的所有项目都填充到列表框中。但是当我在起搏器的帮助下将它作为元组传递给 select 语句时,我的列表 bosx 只有一个条目,即“table_column_name”。

class ListObj(tkinter.Listbox):

    def __init__(self, window, cname, r, c, rs, cs, sticky, bg, 
                     padx=5, pady=5, ipadx=0, ipady=0, **kwargs):

        self = tkinter.Listbox(window)

        self.grid(row=r, column=c, rowspan=rs, columnspan=cs, 
                  sticky=sticky, padx=padx, pady=pady,
                  ipadx=ipadx, ipady=ipady)

        List = cursor.execute(f"SELECT DISTINCT ? FROM juke_box", 
                              (cname,))

        for x in List:
            print(x)
            self.insert(tkinter.END, x)


    list_box= ListObj(root, 'table_column_name',1,0,2,1,'nsew', 'sky blue')

我的预期结果是我应该将列名中的所有项目作为元组传递给 tk 列表。

4

1 回答 1

0
List = cursor.execute(f"SELECT DISTINCT ? FROM juke_box", 
                          (cname,))

看起来您正在尝试将列名作为绑定参数传递。你不能那样做;表名和列名必须在编译时出现在 SQL 语句中,而不是在执行时传递。该cname变量被绑定为一个字符串,并返回该字符串。因为它是 a SELECT DISTINCT,并且表格的每一行最终都选择了相同的'table_column_name'字符串,所以只返回具有该值的一行。整个查询基本上可以简化为SELECT ?问号被替换为cname.

于 2018-12-28T11:52:52.640 回答