【发布时间】:2021-10-21 11:17:50
【问题描述】:
我的问题是关于使用 Django 在视图中查询数据库的最佳实践。
我想要过去 7 天的每日预订计数。有这样的东西可以吗? (下)
count_day_1 = len(Reservations.objects.filter(date=TODAY_DATE).filter(is_reserved=True))
count_day_2 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_1).filter(is_reserved=True))
count_day_3 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_2).filter(is_reserved=True))
count_day_4 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_3).filter(is_reserved=True))
count_day_5 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_4).filter(is_reserved=True))
count_day_6 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_5).filter(is_reserved=True))
count_day_7 = len(Reservations.objects.filter(date=DATE_TODAY_MINUS_6).filter(is_reserved=True))
或者有 7 次 Reservations.objects.filter() 7 次 ping 数据库 7 次?
如果不推荐上述方式,我是否应该改为这样设置? (下)
data = Reservations.objects.filter(is_reserved=True)
for item in data:
if item.date == TODAY_DATE:
print(item.date)
if item.date == DATE_TODAY_MINUS_1:
print(item.date)
(...so on and so forth)
任何建议都会很棒。
谢谢!
【问题讨论】:
-
了解如何记录给定 Django 功能所做的 SQL 查询对您来说很有价值,然后您就会知道这是 7 个查询还是 1 个。如果是 7 个,那么它是真的您确定可以通过 1 个查询解决的性能问题,然后在整个 7 天内发出一个查询,并将结果过滤到代码中的 7 个存储桶中。
标签: python django django-views django-database