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 виновата? Или я где-то накосматил ? Помогите пожалуйста, более опытные создатели ботов тг.