异步视图中的 ORM 连接池管理
在 Django 3.1+ 异步视图中正确使用 ORM,解决数据库连接池耗尽与事务隔离问题,提升高并发场景吞吐量。 · 难度:入门 · +10XP
异步 ORM 连接池
异步视图中调用 sync_to_async 包装的 ORM 操作若不加控制,容易耗尽数据库连接池。本教程将讲解如何利用 asgiref.sync 的线程池策略与数据库连接池配置(如 CONN_MAX_AGE、POOL_OPTIONS)。高级技巧:使用 async def 视图配合 database_utils 的 aconnection 上下文管理器,实现真正的异步数据库游标查询。
from asgiref.sync import sync_to_async
from django.db import connection
async def my_async_view(request):
# 方式1:在线程池中执行 ORM
users = await sync_to_async(list)(User.objects.all())
# 方式2:使用原始游标(异步兼容)
async with connection.cursor() as cursor:
await cursor.execute('SELECT * FROM auth_user')
rows = await cursor.fetchall()
return JsonResponse({'users': users})