Похожие чаты

Привет, столкнулся с такой проблемой Для теста боблю скриптом свою БД сессии

открываются обычным способом

@asynccontextmanager
async def initialize_session(
self,
) -> AsyncIterator[AsyncSession]:
async with self._session_maker() as session:
self._session = session
try:
yield session
except Exception:
await session.rollback()
raise
finally:
self._session = None
print("Finally")

Вместе, где это нужно, принт Finally отрабатывает, т.е сессия должна быть закрыта, но, при завершении скрипта, который шлет реквесты (веб сервер работает дальше) я вижу вот такую картину при вызове

select count(*) from pg_stat_activity; = 105

и все последующие реквесты упираются в лимит, я что-то не так делаю или не понимаю?(

8 ответов

8 просмотров

А это метод у чего? Зачем тут self._session = session?

Марк✙- Автор вопроса
Pavel Павлик
А это метод у чего? Зачем тут self._session = sess...

метод у класса, который работает с бд, не лучший вариант использования, но там будет что-то вроде этого class DBService(SQLAlchemyBase): def __init__(self) -> None: self._session = None def some_request(self) -> None: async with self.initialize_session(): return await self._session.scalar(Model) Прочел, что это дефолтное поведение алхимии, оно возвращает соединение в пул, но не закрывает его какое-то время, видимо, нужно это поведение как-то модифицировать

@asynccontextmanager async def async_session(self): # да и не понятно зачем вы контектсный менджер прям тут описали лучше вызвайте данную функцию в контекстном менджере и внутри мендежера запросы выполняйте async_session = self._async_session() try: yield async_session await async_session.commit() # комита у вас не хватает тоже except Exception as exc: await async_session.rollback() exc_msg = f'Ошибка сессии: {exc}' logging.error(exc_msg) raise finally: await async_session.close() #self._session = None плохая идея так делать закрывать надо имеющимися методами Ну и можно класс описать примерно такой для инициализации подключения к базе class Database: def __int__(self, db_url: str, echo: bool, application_name: str) -> None: self._engine = create_async_engine(db_url, echo=echo, future=True, connect_args={ 'server_settings': { 'application_name': application_name, }, }) self._async_session = sessionmaker( self._engine, expire_on_commit=False, autoflush=True, autocommit=False, class_=AsyncSession, )

Марк✙- Автор вопроса
Fred
@asynccontextmanager async def async_session(s...

Спасибо, но нужен ли комит в блоке файнад? На пил операции нет необхожимости

Марк✙
Спасибо, но нужен ли комит в блоке файнад? На пил ...

Марк✙, Вы увеличили карму Fred до 57.55 (+7.55)

Марк✙
Спасибо, но нужен ли комит в блоке файнад? На пил ...

пример зайды в консоль базы к примеру в psql и попробуй там изменить данные без комита)

Марк✙- Автор вопроса
Fred
пример зайды в консоль базы к примеру в psql и поп...

Так, я про чтение больше, с записью это ясно

Fred
пример зайды в консоль базы к примеру в psql и поп...

алхимия это декларативная орма явно надо прописывать, ведь явное лучше чем не явное 😉

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Карта сайта