Как отправить сообщение в Telegram-боте на aiogram 3, используя данные, извлеченные из базы данных с помощью SQLAlchemy?
Пытаюсь вытащить данные из БД с помощью sqlalchemy. Вот код:
from sqlalchemy import String, ForeignKey
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.ext.asyncio import AsyncAttrs, async_sessionmaker, create_async_engine
engine = create_async_engine(url = "sqlite+aiosqlite:///database.sqlite3")
async_session = async_sessionmaker(engine)
class Base(AsyncAttrs, DeclarativeBase):
pass
class Week(Base):
__tablename__ = "weeks"
id: Mapped[int] = mapped_column(primary_key = True)
type_week: Mapped[str] = mapped_column(String(12))
class Day(Base):
__tablename__ = "days"
id: Mapped[int] = mapped_column(primary_key = True)
day_of_the_week: Mapped[str] = mapped_column(String(12))
class Lesson(Base):
__tablename__ = "lessons"
id: Mapped[int] = mapped_column(primary_key = True)
week: Mapped[str] = mapped_column(ForeignKey("weeks.id"))
day: Mapped[str] = mapped_column(ForeignKey("days.id"))
number: Mapped[str] = mapped_column(String(12))
time: Mapped[str] = mapped_column(String(24))
name: Mapped[str] = mapped_column(String(255))
classroom: Mapped[str] = mapped_column(String(12))
teacher: Mapped[str] = mapped_column(String(24))
class СountingLesson(Base):
__tablename__ = "countingLesson"
id: Mapped[int] = mapped_column(primary_key = True)
first_lesson: Mapped[str] = mapped_column(String(48))
second_lesson: Mapped[str] = mapped_column(String(48))
third_lesson: Mapped[str] = mapped_column(String(48))
fourth_lesson: Mapped[str] = mapped_column(String(48))
fifth_lesson: Mapped[str] = mapped_column(String(48))
sixth_lesson: Mapped[str] = mapped_column(String(48))
async def async_main():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
Код для вывода пользователю(запрос):
from app.database.models import async_session
from app.database.models import Week, Day, Lesson, СountingLesson
from sqlalchemy import select, update
async def get_test():
async with async_session() as session:
test = select(Lesson.name)
result = await session.execute(test)
return result.scalar()
И само сообщение:
from aiogram import F, Router
from aiogram.types import Message, CallbackQuery
from aiogram.filters import CommandStart, Command
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
import app.user.user_keyboards as kb
from app.database.requests import get_test
userRouter = Router()
@userRouter.message(Command("start"))
async def start(message: Message):
test = await get_test()
await message.answer(str(await get_test()))
При запуске бота получается вывод(В БД - 1. колонка дефис. 2. колонка дефис. 3. колонка название предмета):
-
Смотрел на ютубе, на различных сайтах, в офф доке но все ровно ничего не понял
Если знайте то скажите как тупому. Как правильно достать данные из БД и отправлять их в сообщении ботом.