Variable.get () из Optionmenu не возвращает то, что мне нужно для запроса mySQL - PullRequest
0 голосов
/ 22 января 2020

прости меня за дрянное кодирование / описание проблемы. Я новичок в программировании, и это мой первый вопрос! В любом случае, я создаю простую систему инвентаризации с tkinter, используя mySQL в качестве базы данных. В настоящее время я работаю над функцией, которая позволит пользователю выбрать отдел с помощью Optionmenu, а затем получить все элементы в этом отделе. У меня есть элементы, перечисленные в одной таблице, и отделы, перечисленные в другой, с FOREIGN KEY, соединяющим таблицу элементов с первичным ключом (Department_string) в таблице отделов.

Моя цель состоит в том, чтобы mySQL доставил список отделов, а затем чтобы OptionMenu использовал этот список для своих опций. Затем мне нужно запросить базу данных с отделом, выбранным в Optionmenu, чтобы найти все элементы в этом отделе. Моя проблема в том, что variable.get () из Optionmenu возвращает круглые скобки и запятые, которые впервые получены при первом запросе к базе данных. Это делает так, что я не могу напрямую ввести переменную .get () в строку в курсоре. Вот код:

        department_cursor.execute("SELECT department_string FROM departments")
        department_list = department_cursor.fetchall()

        variable = StringVar(search_window)
        variable.set(department_list[0])
        user_entry = OptionMenu(search_window, variable, *department_list)

        ***

        cursor_b.execute("SELECT item WHERE department_string = " + "'" + str(variable.get()) + "'")

Я полагаю, что проблема в том, что variable.get () предоставляет специальные символы, такие как скобки и запятую, полученные из исходного запроса mySQL. Например, если отделами являются HR, Warehouse, R & D, тогда mySQL возвращает [('HR',), ('Warehouse',), ('R & D',)], это затем подается в меню Option, которое затем изменяется. get () выплевывает что-то вроде ('HR',), и поэтому mySQL не распознает это.

Пока что единственное, о чем я могу думать, это использовать для l oop для удалите все специальные символы в том, что возвращает Optionmenu, или в жестком коде, какой должна быть строка для каждого отдела. И то, и другое кажется неоптимальным, и хотя я довольно новичок в программировании, я думаю, что это немного похоже на машину Рубе Голдберга.

В любом случае, если вы сделали это так далеко, большое спасибо за чтение этого! Еще раз, я новичок во всем этом, поэтому любая помощь, которую вы можете оказать мне, очень ценится!

1 Ответ

0 голосов
/ 22 января 2020

.get() собирается вернуть все, что есть в опциональном меню. Если значения, которые вы вводите в опциональное меню, содержат нежелательные символы, значение, которое вы получите, тоже будет.

Вызов базы данных вернет список (строки) списков (столбцов), и не похоже, что вы это учитываете.

...