如何为 asyncpg 保留连接池并在数据库包装器中使用它?
How to persist a connection pool for asyncpg and utilise it in Databases wrapper?
根据 FastApi 文档,我使用 Databases 包装器和 Sqlalchemy Core 在 postgres 数据库上执行异步操作。
我遇到了连接在操作过程中关闭的问题。事实证明它是一个 issue 和 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')
底层 database.connect 使用 asyncpg.create_pool
,您的 SQLALCHEMY_DATABASE_URI 已经有连接变量,您还可以添加额外的连接选项:
db = databases.Database(settings.SQLALCHEMY_DATABASE_URI, max_inactive_connection_lifetime=3)
它们将在连接时传递给 asyncpg.create_pool
。
根据 FastApi 文档,我使用 Databases 包装器和 Sqlalchemy Core 在 postgres 数据库上执行异步操作。
我遇到了连接在操作过程中关闭的问题。事实证明它是一个 issue 和 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')
底层 database.connect 使用 asyncpg.create_pool
,您的 SQLALCHEMY_DATABASE_URI 已经有连接变量,您还可以添加额外的连接选项:
db = databases.Database(settings.SQLALCHEMY_DATABASE_URI, max_inactive_connection_lifetime=3)
它们将在连接时传递给 asyncpg.create_pool
。