gpt4 book ai didi

python - Django 3.1 - 异步 View - 使用查询集

转载 作者:行者123 更新时间:2023-12-04 00:18:24 24 4
gpt4 key购买 nike

从 3.1(目前是测试版)开始,Django 支持异步 View

async def myview(request):
users = User.objects.all()
这个例子不起作用 - 因为 ORM 还没有准备好异步
那么目前的解决方法是什么?
您不能只将 sync_to_async 与 queryset 一起使用 - 因为它们没有被评估:
from asgiref.sync import sync_to_async

async def myview(request):
users = await sync_to_async(User.objects.all)()
所以唯一的方法是在sync_to_async中评估查询集:
async def myview(request):
users = await sync_to_async(lambda: list(User.objects.all()))()
看起来很丑
关于如何让它更好的任何想法?

最佳答案

有一个常见的 GOTCHA:Django 查询集是惰性求值的(数据库查询仅在您开始迭代时发生):
所以相反 - 使用评估(带列表):

from asgiref.sync import sync_to_async

async def myview(request):
users = await sync_to_async(list)(User.objects.all())

关于python - Django 3.1 - 异步 View - 使用查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62530017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com