我想创建一个与数据库交互的类,但是只使用一个池(通过单例模式实现),同时,我可以在数据库之间切换,而无需重新创建连接。
也就是说,我获取一个连接,然后我通过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)
这里有一个类,它被初始化一次,创建主池,然后简单地分发连接,我已经想连接到一个特定的数据库并使用它。
或者,您可以提供自己的实现。我最需要的是-系统的最小负载。使用多个数据库。
已经写了上面的所有内容。一个异步连接中的多个数据库
1条答案
按热度按时间v440hwme1#
一旦建立了到PostgreSQL数据库的连接,就不能切换到其他数据库,除非关闭旧连接并打开新连接。因此,每个数据库需要一个连接池。
如果您需要文档参考,here goes:
连接到数据库服务器时,客户端必须在其连接请求中指定数据库名称。每个连接不能访问多个数据库。