169 похожих чатов

Привет, использую asyncpg подскажите пожалуйста, почему контекстный менеджер не хочет

брать коннекшн?
class DBStorage(Gateway):
driver_name = 'DBStorage'
def __init__(self, config):
self._config = config
self._guard = None
self._log = None
self.connection = None

if hasattr(config, 'driver_name') and getattr(config, 'driver_name', None):
self.driver_name = config.driver_name

async def _connect(self):
print('..._connect')
print('CONFIG', self._config.dsn)
self.connection = await asyncpg.connect(self._config.dsn)
async def _close(self):
await self.connection.close()
async def __aenter__(self):
print('aenter db')
await self._connect()
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
print('aexit db')
await self._close()

async def execute(self, query, *args):
print(f'con: {self.connection}', query)
async with self.connection as con:
result = await con.execute(query, *args)
return result.fetch()
пишет async with self.connection as con:
TypeError: 'NoneType' object does not support the asynchronous context manager protocol
интересно почему не инициализируется connection

10 ответов

62 просмотра

Привет, можешь плиз в patebin завернуть код?

https://magicstack.github.io/asyncpg/current/api/index.html#connection у объекта Connection нету реализации методов aenter aexit

Alexander- Автор вопроса
Matvey Tingaev
https://magicstack.github.io/asyncpg/current/api/i...

спасибо, тогда получается мне надо вообще убирать метод execute из DBStorage и переименовывать DBStorage в DBConnection, чтоб использовать как контестный менеджер, т.к. я добавил туда aenter async with DBStorage(**dsn) as con: res = await con.fetch(select.... from ...) return res

Alexander
спасибо, тогда получается мне надо вообще убирать ...

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

Alexander- Автор вопроса
Matvey Tingaev
А есть ли необходимость использовать его как конте...

ну а как по другому безопасно делать запрос без Алхимии через чистый asyncpg, чтоб закрывалось соединение?

Alexander
ну а как по другому безопасно делать запрос без Ал...

Cудя по коду, ты планируешь на каждый запрос создавать объект соединения с БД и каждый раз закрывать после выполнения запроса, такое поведение нужно в твоем приложении?

Alexander- Автор вопроса
Matvey Tingaev
Cудя по коду, ты планируешь на каждый запрос созда...

ну да, у меня по сценарию модуль отвечает только за сохранение одной сущности, и это не очень высоконагружено, но т.к. другие микросервисы могут тоже работать с БД, то наверно лучше было бы закрывать за собой открытые соединения, если они не используются. Могу ошибаться конечно. В алхимии обычно это реализуется с помощью сессии

Alexander
ну да, у меня по сценарию модуль отвечает только з...

Я бы наверно посмотрел в сторону https://www.pgbouncer.org

Alexander- Автор вопроса

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта