@xxx_xxx_xxx_xxx

Разрабатываю телеграм бота с telebot на python. Как сделать нормальный вывод данных из бд с кнопкой?

Доброго времени суток. Разрабатываю телеграмм бота используя telebot на python. Нужно сделать вывод данных из бд с кнопкой. Но у меня получается вот так:
606df830391ea572552917.png
606df839e5491191413622.png
606df8426ab00093549962.png

Нужно сделать чтобы была только одна кнопка и з определенным url из бд.

Код:
# ВИВІД ТОВАРІВ
@bot.callback_query_handler(func=lambda call: True)
def Tovars(call):
    kb = Keyboard()
    q = DB()
    cnn = q.create_connection(echo_config.path)
    tovars=q.execute_tovars(cnn)
    tovarKeyboard=types.InlineKeyboardMarkup()

    for tovar in tovars:
        photo = open(tovar[3], 'rb')
        caption = f"Назва: {tovar[1]}.\nОпис: {tovar[2]}.\nЦіна: {tovar[6]} грн."
        tovarKeyboard.add(types.InlineKeyboardButton(text="Перейти до товару на сайті", url=tovar[4]))

        bot.send_photo(call.message.chat.id, photo, caption, reply_markup=tovarKeyboard)

Код с запросом из бд (работаю с SQLite):
def execute_tovars(self, connection):
        cursor=connection.cursor()
        query="SELECT * FROM Tovar"
        try:
            cursor.execute(query)
            result = cursor.fetchall()
            return result
        except Error as e:
            print(f"The error '{e}' occured ")
        cursor.close()

Таблица в бд (url в таблице рандомныйе. Только для того чтобы проверить или выполняется переход по ссылке):
606df9ba7aea0003457796.png
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Тогда и клавиатуру надо каждый раз заново создавать, а не добавлять кнопки к существующей

for tovar in tovars:
        photo = open(tovar[3], 'rb')
        caption = f"Назва: {tovar[1]}.\nОпис: {tovar[2]}.\nЦіна: {tovar[6]} грн."
        tovarKeyboard=types.InlineKeyboardMarkup()
        tovarKeyboard.add(types.InlineKeyboardButton(text="Перейти до товару на сайті", url=tovar[4]))

        bot.send_photo(call.message.chat.id, photo, caption, reply_markup=tovarKeyboard)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы