@GoNt1eR

Как сделать вывод данных из бд при нажатии кнопки в тг боте?

Всем привет! Пытаюсь создать бота с фильмами и сериалами на питоне и в процессе создания возникла проблемка с выводом данных из бд
Суть бота такая, что сначала пользователь выбирает по кнопкам фильмы или сериалы, а затем ему выдаются жанры того что он выбрал и после выбора жанра из бд должен выдаваться случайный фильм или сериал именно по выбранному жанру .
Но тк на начальной стадии изучения данной тематики не могу понять как сделать вывод из бд при нажатии одного из жанров(При нажатии должно выходить фото, название, описание и дата)

from aiogram import Bot, Dispatcher, executor, types
from App import keyboards as kb
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from dotenv import load_dotenv
import os
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from App import database as db


storage = MemoryStorage()
load_dotenv()
bot = Bot(os.getenv('TOKEN'))
dp = Dispatcher(bot=bot, storage=storage)


async def on_startup(_):
    await db.db_start()
    print('Бот запущен!')

@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
    await db.cmd_start_db(message.from_user. id)
    await message.answer_sticker('CAACAgIAAxkBAAMfZVnFYcTH_ot9mVSelHLMNxblcMgAAgUAA8A2TxP5al-agmtNdTME')
    await message.answer(f'{message.from_user.first_name} приветствую тебя в боте с фильмами и сереалами БЕЗ КОДОВ!',
                         reply_markup=kb.main)

@dp.message_handler(commands=['id'])
async def cmd_id(message: types.Message):
    await message.answer(f'{message.from_user.id}')

@dp.message_handler(text='Фильмы')
async def catalog(message: types.Message):
    await message.answer(f'Выберете жанр фильма', reply_markup=kb.Film_list)

@dp.message_handler(text='Cериалы')
async def catalog(message: types.Message):
    await message.answer(f'Выберете жанр сериала', reply_markup=kb.Series_list)

@dp.message_handler()
async def answer(message: types.Message):
    await message.reply('К сожалению я тебя не понял :(')

@dp.callback_query_handler()
async def callback_query_keyboard(callback_query: types.CallbackQuery):
    if callback_query.data == 'f-comedy':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Комедия')
    elif callback_query.data == 'f-triller':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Триллер')
    elif callback_query.data == 'f-fantasy':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Фэнтези')
    elif callback_query.data == 'f-drama':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Драма')
    elif callback_query.data == 'f-scream':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Ужасы')
    elif callback_query.data == 'f-travel':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Приключения')
    elif callback_query.data == 'f-fight':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Боевик')
    elif callback_query.data == 'f-mult':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Мультфильм')
    elif callback_query.data == 'f-detective':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Детектив')
    elif callback_query.data == 's-comedy':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Комедия')
    elif callback_query.data == 's-anime':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Аниме')
    elif callback_query.data == 's-fantasy':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Фэнтези')
    elif callback_query.data == 's-drama':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Драма')
    elif callback_query.data == 's-detective':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Детектив')
    elif callback_query.data == 's-fight':
        await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Боевик')

if __name__ == '__main__':
    executor.start_polling(dp, on_startup=on_startup, skip_updates=True)


Клавиатуры
from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardButton, InlineKeyboardMarkup


main = ReplyKeyboardMarkup(resize_keyboard=True)
main.add('Фильмы').add('Cериалы')

Film_list = InlineKeyboardMarkup(row_width=2)
Film_list.add(InlineKeyboardButton(text='Комедия', callback_data='f-comedy'),
              InlineKeyboardButton(text='Триллер', callback_data='f-triller'),
              InlineKeyboardButton(text='Фэнтези', callback_data='f-fantasy'),
              InlineKeyboardButton(text='Драма', callback_data='f-drama'),
              InlineKeyboardButton(text='Ужасы', callback_data='f-scream'),
              InlineKeyboardButton(text='Приключения', callback_data='f-travel'),
              InlineKeyboardButton(text='Боевик', callback_data='f-fight'),
              InlineKeyboardButton(text='Детектив', callback_data='f-detective'),
              InlineKeyboardButton(text='Мультфильм', callback_data='f-mult'))

Series_list = InlineKeyboardMarkup(row_width=2)
Series_list.add(InlineKeyboardButton(text='Комедия', callback_data='s-comedy'),
                InlineKeyboardButton(text='Фэнтези', callback_data='s-fantasy'),
                InlineKeyboardButton(text='Драма', callback_data='s-drama'),
                InlineKeyboardButton(text='Аниме', callback_data='s-anime'),
                InlineKeyboardButton(text='Боевик', callback_data='s-fight'),
                InlineKeyboardButton(text='Детектив', callback_data='s-detective'))

cancel = ReplyKeyboardMarkup(resize_keyboard=True)
cancel.add('Отмена')


И бд
import sqlite3 as sq

async def db_start():
    global db, cur
    db = sq.connect('tg.db')
    cur = db.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS accounts("
                "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                "tg_id INTEGER, "
                "cart_id TEXT)")
    cur.execute("CREATE TABLE IF NOT EXISTS items("
                "i_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                "name TEXT,"
                "desc TEXT, "
                "date TEXT, "
                "photo TEXT, "
                "genre TEXT)")
    db.commit()

async def cmd_start_db(user_id):
    user = cur.execute("SELECT * FROM accounts WHERE tg_id == {key}".format(key=user_id)).fetchone()
    if not user:
        cur.execute("INSERT INTO accounts (tg_id) VALUES ({key})".format(key=user_id))
        db.commit()
  • Вопрос задан
  • 747 просмотров
Пригласить эксперта
Ответы на вопрос 1
Zagir-vip
@Zagir-vip
Web dev, Game dev, app dev, Разработчик на Python!
Может помогу.

genre = "f-mult" # выбранный жанр
films = cur.execute("SELECT * FROM items WHERE genre=?", (genre,)).fetchall()
film = random.choices(films)
print(film)


вот вам примерный код. Дальше сами
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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