Alchemy2 и aiogram 3 ошибка connection was closed in the middle of operation

Коллеги, помогите пожалуйста Пишу 1-й свой бот. Мои данные

    Python 3.12
    aiogram - 3.3.0
    asyncpg - 0.29.0
    SQLAlchemy - 2.0.29

Подключаюсь к 127.0.0.1 (пробовал и localhost - без разницы) имя пользователя и пароль - правильные, имя базы - тоже правильное. Все import-ы сделаны во всех модулях правильно. Мой код в модуле run.py

    import asyncio
    import logging
    import os
    from aiogram import Bot, Dispatcher
    from app.handlers import user_router as user_router
    from app.admin import admin_router

    async def main():
        bot = Bot(os.getenv('TOKEN'))
        dp = Dispatcher()

    dp.include_routers(user_router, admin_router)
        await dp.start_polling(bot)

    if __name__ == '__main__':
        logging.basicConfig(level=logging.INFO)
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print('Exit')

В модуле admins.py код пока минималистичный:

    from aiogram import Router

    admin_router = Router() 

Подключение к PostgreSQL 15 вот так:

    user      = os.getenv('PG_User')
    password = os.getenv('POSTGE_PASSWORD')
    host     = os.getenv('PG_HOST')
    dbname   = os.getenv('PG_BASENAME')

    engine = create_async_engine(f"postgresql+asyncpg://postgre: 
    {user}:{password}@{host}/{dbname}")

    async_session = async_sessionmaker(engine)

в модуле queries.py у меня написано следующее:

    async def get_user(tg_id):
        async with async_session() as session:
            user = await session.scalar(select(User).where(User.user_id == tg_id))
        answer = {'user_id':user.user_id,
        'first_name':user.first_name,
        'second_name':user.second_name,
        'balance':user.balance,
        'state': user.active}
    return answer

в отладчике вижу, что user = await session.scalar(select(User).where(User.user_id == tg_id)) вроде выполняется, но при возвращении обратно на async with async_session() as session, я так понимаю, для закрытия сессии как раз и возникает ошибка.

в модуле Models.py модель User определена вот так:

    class User(Base):
        __tablename__ = 'users'
       id: Mapped[int]         = mapped_column(primary_key=True)
       active: Mapped[bool]    = mapped_column(BOOLEAN)
       balance: Mapped[float]  = mapped_column(FLOAT)
       user_id                 = mapped_column(BIGINT, unique = 
       True)
       first_name: Mapped[str] = mapped_column(String(40))
       second_name:Mapped[str] = mapped_column(String(50))
       user_state:Mapped[bool] = mapped_column(BOOLEAN)

В итоге в модуле handlers.py вызываю функцию get_user() вот так:

    @user_router.message(CommandStart())
    async def cmd_start(message: Message):
        user_info = await get_user(message.from_user.id)

и вместо dict получаю вот такую ошибку

    INFO:aiogram.event:Update id=677875462 is not handled. Duration 
    546 ms by bot id=6991377437
    ERROR:aiogram.event:Cause exception while process update 
    id=677875462 by bot id=6991377437
    ConnectionDoesNotExistError: connection was closed in the middle of operation

потом идет куча сообщений, среди которых есть такие:

    OSError: [WinError 64] Указанное сетевое имя более недоступно
    During handling of the above exception, another exception occurred:

и в итоге снова получаю вот такую строку:

    asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation

Какой такой Update хочет, если у меня простой как 3 рубля запрос с Select? В одном видео слышал, что мол для 3.12 еще не все библиотеки готовы и рекомендацию использовать 3.11. Неужели и вправду версия Python виновата? Или я где-то накосматил ? Помогите пожалуйста, более опытные создатели ботов тг.


Ответы (0 шт):