Загрузка данных


def get_all_products(self):
        conn = self.connect()
        cursor = conn.cursor()
        
        # Используем JOIN, чтобы вместо цифр подтягивать реальные названия из справочников
        query = """
            SELECT 
                t.[id],                     -- r[0]: id товара (проверь название колонки в БД)
                t.[Артикул],                -- r[1]
                nt.[name_tovar],            -- r[2]: ТЕКСТ наименования
                t.[Единица_измерения],      -- r[3]
                t.[Стоимость],              -- r[4]
                sup.[suplier_name],         -- r[5]: ТЕКСТ поставщика
                m.[maker_name],             -- r[6]: ТЕКСТ производителя
                cat.[male_name],            -- r[7]: ТЕКСТ категории
                t.[Действующая_скидка],     -- r[8]
                t.[Кол_во_на_складе],       -- r[9]
                t.[Описание],               -- r[10]
                t.[Изображение]             -- r[11]
            FROM [Tovar] t
            LEFT JOIN [name_tovar] nt ON t.[Наименование_товара] = nt.[nam_id]
            LEFT JOIN [supliers] sup ON t.[Поставщик] = sup.[sup_id]
            LEFT JOIN [makers] m ON t.[Производитель] = m.[maker_id]
            LEFT JOIN [male] cat ON t.[Категория _товара] = cat.[male_id]
        """
        
        # Если SQL-сервер ругается на названия колонок, просто поправь их в SELECT выше
        # на те, которые у тебя реально используются в базе.
        
        cursor.execute(query)
        rows = cursor.fetchall()
        conn.close()
        
        return [Product(
            tovar_id=str(r[0]), article=str(r[1]), name=str(r[2]),
            unit=str(r[3]), price=str(r[4]), supplier=str(r[5]), 
            manufacturer=str(r[6]), category=str(r[7]), 
            discount=str(r[8]), quantity=str(r[9]), 
            description=str(r[10]), photo=str(r[11])
        ) for r in rows]