Множество пулов asyncpg

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

Тоесть я беру коннект, далее через контекстный менеджер with использую acquire, и далее я хочу подключиться к определенной базе данных. Как мне это сделать?

class ConnectionPool:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

    async def init(self):
        self.pool = await asyncpg.create_pool(
            dsn=f"postgres://{cfg.DB_USER}:{cfg.DB_PASSWORD}@{cfg.DB_HOST}:{cfg.DB_PORT}"
        )

    async def acquire(self):
        conn = await self.pool.acquire()
        return conn

    async def release(self, conn):
        await self.pool.release(conn)

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

Ну или вы можете предложить свою реализацию. Главное что мне нужно - минимальная нагрузка на систему. Использование множества баз данных.


Ответы (0 шт):