【发布时间】:2018-02-09 08:37:58
【问题描述】:
我经常需要缓存结果并执行类似 ORM 的操作,但使用 普通 Python 逻辑,因为我不希望数据库因性能问题而受到影响。
出于这个原因,我想知道 Django 是否提供了一种在缓存的 QuerySet 上执行 ORM 操作的方法,而不是每次我们使用的 core 查询略有变化时都查询数据库。
为了形象化我在说什么,假设我们有这些不同的查询:
# when evaluated it hits the db
devs = Worker.objects.filter(job__category=JobCategory.DEVELOPER)
# when evaluated it hits the db again
young_devs_salary = devs.filter(dob__gte=datetime.now() - relativedelta(years=24)).values('dob', 'salary')
# it would hit the db again
wellpaid_devs = devs.filter(salary__gte=high_salary_yearly)
请注意,第一个 QuerySet 将是以下 QuerySets 其余部分的超集。
我所追求的是想办法告诉 Django 只有第一个查询 devs 应该访问数据库,然后缓存其结果,而其他使用 devs 的查询不应该查询数据库,但改为缓存QuerySet。
这可能吗?如果 Django 不支持这个,为什么?也许我的情况并不常见?但我有点怀疑,因为我每天都会遇到类似的情况。
【问题讨论】:
标签: python django database caching