Select语句中的Pace Maker无法正常工作

时间:2018-12-28 09:39:00

标签: python python-3.x sqlite pacemaker

在没有起搏器的sqlite3(Python)中的Select语句工作正常,但与起搏器(?)的行为却很奇怪

在下面的代码中,当我在选择中使用“ table_column_name”时,我将列表中的所有项目填充到列表框中。但是当我在起搏器的帮助下将其作为选择语句的元组传递时,我的列表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列表中。

1 个答案:

答案 0 :(得分:0)

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

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