gpt4 book ai didi

python - django 访问模型需要花费很多时间

转载 作者:行者123 更新时间:2023-11-30 00:01:14 27 4
gpt4 key购买 nike

我有一个这样的模型:

class Event(models.Model):
description = models.CharField(max_length=3072)
severity = models.CharField(max_length=96)
reception_timestamp = models.DateField()
version = models.CharField(max_length=100)
mail_archive_id = models.PositiveIntegerField()
component_id = models.CharField(max_length=32)
technician_at_work = models.BooleanField()
timestamp = models.DateField(db_index=True)
system = models.ForeignKey(System)
event_code = models.ForeignKey(EventCode)

在我的views.py 文件中,我尝试访问信息所在的MySql 数据库。

我运行了一些 QuerySets 操作,然后我继续从模型中提取所需的信息以将其呈现为 html 模板,但提取信息花费了太多时间:

events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
return [ e.timestamp, e.system.serial_number, e.version, e.event_code.code, e.description, e.severity, e.reception_timestamp for e in events ]

我尝试了一些方法,例如创建一个生成器并将其发送到模板,以使用它渲染 HTML 文档,但访问信息需要花费相同的时间。

我能做什么?只需要一两分钟就可以抓取到270行。我检测到查询需要几秒钟,但消耗其余时间的是对信息的访问。我怎样才能提高这个?

谢谢!

最佳答案

两点:

1) QuerySet 的计算是惰性的,因此它们的计时可能有点奇怪。 “events = Event.objects...”行是否需要几秒钟,或者您是否对查询集加上获取数据进行了计时?后者看起来像这样:

start = time.time()
# build lazy queryset:
events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
# evaluate and flatten queryset:
res = [ e.timestamp, e.system.serial_number, e.version, e.event_code.code, e.description, e.severity, e.reception_timestamp for e in events ]
logging.info('query took %s', time.time()-start)

2) 您可以使用 values_list() 让 QuerySet 直接为您输出字段,而不是使用单独的 for 循环。方法。也就是说:

events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
event_vals = events.values_list('timestamp', 'system.serial_number') # more here
return event_vals

第一行构建一个惰性查询集,描述您想要的数据类型。第二行要求 Django 只给你一个元组列表。它为您重新排序并展平数据,并且可能比将所有行显式转换为模型,然后使用单独的循环提取数据更快。

关于python - django 访问模型需要花费很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25022140/

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