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 ответов

26 просмотров

Привет, можешь плиз в 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- Автор вопроса

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта