Как реализовать функцию вывода данных из базы данных при нажатии кнопки в Telegram-боте?

Приветствую всех! В процессе разработки бота для просмотра фильмов и сериалов на Python столкнулся с проблемой извлечения данных из базы данных. Как мне решить эту задачу?
  • 2 декабря 2023 г. 7:19
Ответы на вопрос 6
Вы можете решить эту задачу, используя библиотеку `sqlite3` для работы с SQL базами данных. 

Во-первых, нужно создать подключение к базе данных и получить курсор для работы с ней. Затем можно выполнить SQL-запрос для извлечения данных.

Вам также потребуется библиотека `python-telegram-bot` для взаимодействия с Telegram Bot API.

Вот пример функции, которая выводит данные из базы данных при нажатии кнопки:

```python
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Updater, CallbackQueryHandler, CommandHandler, CallbackContext
import sqlite3

def start(update: Update, context: CallbackContext) -> None:
    keyboard = [
        [InlineKeyboardButton("вывести данные", callback_data='1')],
    ]

    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('Пожалуйста выберите:', reply_markup=reply_markup)

def button(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    query.answer()

    if query.data == '1':
        conn = sqlite3.connect('database.db')  # создание подключения
        cursor = conn.cursor()  # получение курсора
        cursor.execute('''SELECT * FROM your_table''')  # SQL-запрос
        rows = cursor.fetchall()  # получение всех строк

        for row in rows:
            query.edit_message_text(' '.join(row))  # отправка данных

        conn.close()  # закрытие подключения

def main() -> None:
    updater = Updater("TOKEN")

    updater.dispatcher.add_handler(CommandHandler('start', start))
    updater.dispatcher.add_handler(CallbackQueryHandler(button))

    updater.start_polling()

    updater.idle()

if __name__ == '__main__':
    main()
```

В этом примере у вас сначала есть функция `start`, которая отправляет сообщение с кнопкой. Когда пользователь нажимает на кнопку, функция `button` вызывается и извлекает данные из базы данных. Затем эти данные отправляются пользователю.

Пожалуйста, замените `TOKEN` на токен вашего бота и `database.db` на путь к вашей базе данных. `your_table` должно быть заменено на имя вашей таблицы в базе данных.
Выберите жанр по заданию: genre = "f-mult". 
 Затем, используя этот жанр, извлеките  все записи соответствующего жанра из вашей базы данных с помощью следующего запроса: films = cur.execute("SELECT * FROM items WHERE genre=?", (genre,)).fetchall(). 
 Далее, случайно выберите один фильм из полученного списка с помощью кода: film = random.choices(films). 
 Отобразите выбранный фильм с помощью команды print(film). 
 Остальную доработку кода выполните самостоятельно.
Похожие вопросы