gpt4 book ai didi

django - 如何判断 Django QuerySet 是否已被评估?

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

我正在手动创建一个 Django 查询集,并且只想使用 Django ORM 来读取生成的 querset.query SQL 本身,而无需访问我的数据库。

我知道 Django 查询集是懒惰的,我看到所有触发查询集的操作都被评估:

https://docs.djangoproject.com/en/1.10/ref/models/querysets/#when-querysets-are-evaluated

但是......如果我只是想验证我的代码纯粹是构建查询集的胆量,但又没有在无意中评估和击中我的数据库怎么办?查询集对象上是否有任何属性可以用来验证它在没有实际评估的情况下未被评估?

最佳答案

对于使用 select 的查询集返回模型实例列表,如基本过滤器或排除,_result_cache属性为 None如果尚未评估查询集,或者如果已评估结果列表。关于非公共(public)属性的常见警告适用。
请注意,打印查询集 - 尽管文档说明调用 repr()作为评估触发器 - 实际上并不评估原始查询集。相反,原始查询集在内部链接到一个新查询集,以便它可以限制打印的数据量,而不会更改原始查询集的限制。确实,它评估了原始查询集的一个子集,因此会访问数据库,因此如果您实际上是在尝试使用它来监控所有数据库流量,那么这是这种方法的另一个弱点。
对于其他查询集(计数、删除等),我不确定是否有简单的方法。可以查看您的数据库日志,或者在 DEBUG 中运行模式和检查connection.queries如此处所述:
https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running

关于django - 如何判断 Django QuerySet 是否已被评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617878/

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