Pace Maker в операторе Select не работает - PullRequest
0 голосов
/ 28 декабря 2018

Оператор выбора в sqlite3 (Python) без кардиостимулятора работает нормально, но ведет себя странно с кардиостимулятором (?)

В приведенном ниже коде, когда я использую "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 голосов
/ 28 декабря 2018
List = cursor.execute(f"SELECT DISTINCT ? FROM juke_box", 
                          (cname,))

Похоже, вы пытаетесь передать имя столбца в качестве связанного параметра.Вы не можете сделать это;имена таблиц и столбцов должны присутствовать в операторе SQL, когда он компилируется, а не передаваться во время выполнения.Переменная cname связывается как строка, и эта строка возвращается.Поскольку это SELECT DISTINCT, и каждая строка таблицы заканчивается выбором одной и той же строки 'table_column_name', возвращается только одна строка с этим значением.Весь этот запрос в основном может быть уменьшен до SELECT ?, где знак вопроса заменяется строкой в ​​cname.

...