@Sigurnbiern
Учусь программировать на python

Как создать выпадающий список с данными из postgres на python?

Нужно чтобы в зависимости от выбора одного из вариантов в одном выпадающем списке, в другом выпадающем списке были данные из двух разных таблиц postgres. Вот кусок кода
class data():


    def request_data(request):
        # Подключаемся к БД
        conn = psycopg2.connect(
            host=host,
            user=user,
            password=password,
            database=db_name
            )
        # Создаем курсор
        cur = conn.cursor()
        
        # Выполняем запрос для получения данных из базы данных
        cur.execute(request)
        
        # Получаем все строки результата запроса
        rows = cur.fetchall()

        # Закрываем курсор и соединение с базой данных
        cur.close()
        conn.close()
        return rows


    def update_route_list(*args, variable_typet,combo_box_route, variable_route):
        select_item = variable_typet.get()

        if select_item == 'Троллейбус':
            rows = data.request_data(request='select "Route_num" from "Route TB"')
        elif select_item == 'Трамвай':
            rows = data.request_data(request='select "Route_num" from "Route T"')

        combo_box_route['menu'].delete(0, 'end')
        for item in rows:
            combo_box_route['menu'].add_command(label=item[1],  command=tk._setit(variable_route, item[1]))
        
        
        
    def create_window(root):
    
        insert_window = tk.Toplevel(root)

        variable_typet = tk.StringVar(insert_window)
        variable_typet.set("Троллейбус")
        combo_box_typet = ttk.OptionMenu(insert_window, variable_typet, "Троллейбус", "Троллейбус", "Трамвай")
        combo_box_typet.grid(row=4,column=1)

        variable_route = tk.StringVar(insert_window)
        variable_route.set("")
        combo_box_route = ttk.OptionMenu(insert_window, variable_route, "")
        combo_box_route.grid(row=5,column=1)

        variable_typet.trace("w", data.update_route_list( variable_typet=variable_typet, combo_box_route=combo_box_route, variable_route=variable_route))

Выдает такую ошибку
Traceback (most recent call last):
  File "c:\Users\vladi\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "d:\Projects\tests\Myschedule.py", line 12, in open_insert_window
    data.create_window(self.root)
  File "d:\Projects\tests\MyDb.py", line 100, in create_window
    variable_typet.trace("w", data.update_route_list( variable_typet=variable_typet, combo_box_route=combo_box_route, variable_route=variable_route))
  File "d:\Projects\tests\MyDb.py", line 82, in update_route_list
    combo_box_route['menu'].add_command(label=item[1],  command=tk._setit(variable_route, item[1]))
IndexError: tuple index out of range
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
select "Route_num" from "Route TB"
Во-первых, ты кавычки не перепутал? В SQL вроде имена столбцов и таблиц экранируются `бэктиками`, а не "кавычками".
Во-вторых, ты просишь выбрать одно значение на каждой строке. Но в то же время обращаешься к item[1], т.е. ко второму элементу строки. Которого быть не может, так как ты выбираешь только один.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы