@MakarMS

Как сделать класс БД с asyncpg?

Привет всем, не могу понять, как сделать класс на asyncpg для бота в ТГ на aiogram. Раньше работал с telebot и psycopg2, и всё было замечательно. Как закрывать соединение, если в __del__ нельзя поместить await self.__conn.close()? Такое чувство, что залез фиг знает куда. Буду рад, если кто-то скинет свой класс, чтобы я взял за пример его.

Ругается:
cannot perform operation: another operation is in progress


class DB:
    def __init__(self):
        self.__log = Logger('db')

        asyncio.run(self.__run())

    async def __run(self):
        try:
            self.__conn = await asyncpg.connect(
                user=Config.db['username'],
                password=Config.db['password'],
                database=Config.db['database'],
                host=Config.db['host'],
                port=Config.db['port']
            )

        except Exception as error:
            self.__log.error(error)

    async def __check_reg(self, user_id: int) -> bool:
        try:
            if len(await self.__conn.fetchrow("SELECT * FROM users WHERE id = $1", user_id)) > 0:
                return True

            return False

        except Exception as error:
            self.__log.error(error)
            return False

    async def register_user(self, user) -> bool:
        if await self.__check_reg(user['id']) is False:

            try:
                await self.__conn.execute(
                    '''INSERT INTO users 
                        (users.id, users.first_name, users.last_name, users.username, users.timestamp) 
                        VALUES ($1, $2, $3, $4, $5)''', user['id'], user['first_name'], user['last_name'],
                    user['username'], datetime.now())

                return True

            except Exception as error:
                self.__log.error(error)
                return False
  • Вопрос задан
  • 386 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Jack444
А зачем тебе __del__? Ищи в любом фреймворке события startup и shutdown, через них открывай и закрывай коннекты
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы