如何为 asyncpg 保留连接池并在数据库包装器中使用它?

How to persist a connection pool for asyncpg and utilise it in Databases wrapper?

根据 FastApi 文档,我使用 Databases 包装器和 Sqlalchemy Core 在 postgres 数据库上执行异步操作。

我遇到了连接在操作过程中关闭的问题。事实证明它是一个 issueasyncpg 并且可以通过使用池来解决。

但是我没有直接使用 asyncpg,而是使用 FastAPI 推荐的数据库包装器。我如何创建这样的池:

await asyncpg.create_pool(database="dbname", 
    user="username", 
    password="dbpw",
    max_inactive_connection_lifetime=3)

并在数据库包装器中使用它?

import databases
from sqlalchemy import MetaData

db = databases.Database(settings.SQLALCHEMY_DATABASE_URI)
metadata = MetaData(schema='main')

底层 database.connect 使用 asyncpg.create_pool,您的 SQLALCHEMY_DATABASE_URI 已经有连接变量,您还可以添加额外的连接选项:

db = databases.Database(settings.SQLALCHEMY_DATABASE_URI, max_inactive_connection_lifetime=3)

它们将在连接时传递给 asyncpg.create_pool