Множество пулов 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)
Вот класс, он инициализируется один раз, создает главный пул, а потом просто раздает соединения, в которых я уже и хочу подключаться к определенной базе данных и ее использовать.
Ну или вы можете предложить свою реализацию. Главное что мне нужно - минимальная нагрузка на систему. Использование множества баз данных.