Задать вопрос
@alexdem123

Как вывести значения таблицы SQLite3 в inline-кнопках?

Вывожу все данные из таблицы SQLite3:
def get_group_name_from_db(self,):
        with self.connection:
            rows = self.cursor.execute('SELECT `name` FROM `groups`').fetchall()
            group_names = [row[0] for row in rows]
            return group_names


Пытаюсь вывести каждую из категорий в виде inline-кнопок:
@router.message(F.text == 'Каталог')
async def catalog(message : Message):
    categories_kb = InlineKeyboardBuilder()
    categories = db.get_group_name_from_db()
    for category in categories:
        categories_kb.add(InlineKeyboardButton(text=categories, callback_data=f'category_'))
    return categories_kb.adjust(2).as_markup()

    await message.answer('Выберите категорию товара:', reply_markup=await categories)


В итоге выдает ошибку:
Input should be a valid string [type=string_type, input_value=['Яндекс'], input_type=list]
    For further information visit https://errors.pydantic.dev/2.5/v/string_type


По переводу я примерно понимаю в чем ошибка, но не знаю как ее устранить.
P.S: traceback будет в комментариях
  • Вопрос задан
  • 155 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
febday
@febday
Клавиатуру исправьте
Вы в text передаёте список, а не строку

for category in categories:
        categories_kb.add(InlineKeyboardButton(text=category, callback_data=f'category_'))


Также передавайте в reply_markup вы передаёте какой-то бред
await message.answer('Выберите категорию товара:', reply_markup=categories_kb.as_markup())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
А ты прочитай свой код внимательно.
@router.message(F.text == 'Каталог')
async def catalog(message : Message):
    categories_kb = InlineKeyboardBuilder()
    categories = db.get_group_name_from_db()
    for category in categories:
        categories_kb.add(InlineKeyboardButton(text=categories, callback_data=f'category_'))  # чему-чему равен text?
    return categories_kb.adjust(2).as_markup()  # ты же понимаешь, что строка ниже не выпонится?

    await message.answer('Выберите категорию товара:', reply_markup=await categories)  # что ещё за await? categories - это список.
    # или ты имел ввиду categories_kb?
Ответ написан
@Everything_is_bad
1. нафига ты traceback вынес в комментарии? когда его надо сразу в вопросе показывать
2. прочитай уже что тебе в ошибке написали, что хотят строку, а не список, который туда туда суешь
Ответ написан
Ваш ответ на вопрос

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

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