如何为asyncpg持久化连接池,并在Databases包装器中使用它?

4
根据FastApi文档,我正在使用Databases包装器和Sqlalchemy Core在postgres数据库上执行异步操作。
我遇到了一个问题,在操作过程中连接被关闭。事实证明这是asyncpg问题,可以通过使用池来解决。
然而,我没有直接使用asyncpg,而是使用了Database包装器,因为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')
1个回答

1
在幕后 database.connect 使用 asyncpg.create_pool,你的 SQLALCHEMY_DATABASE_URI 已经有连接变量,你也可以添加额外的连接选项:
db = databases.Database(settings.SQLALCHEMY_DATABASE_URI, max_inactive_connection_lifetime=3)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接