首页 > 解决方案 > 如何为 asyncpg 持久化连接池并在数据库包装器中使用它?

问题描述

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

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

但是我没有直接使用 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')

标签: pythonfastapiasyncpg

解决方案


在后台database.connect uses asyncpg.create_pool,您的 SQLALCHEMY_DATABASE_URI 已经有连接变量,您还可以添加其他连接选项:

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

它们将被传递给asyncpg.create_pool连接。


推荐阅读