【问题标题】:How does a queryset knows what records are in the database if it doesn't hit the database如果查询集没有命中数据库,它如何知道数据库中有哪些记录
【发布时间】:2019-10-15 09:33:38
【问题描述】:

Django 查询集是惰性的

person_set = Person.objects.all()

在文档中它说上面的代码没有运行任何数据库查询。 但是使用上面的命令它会在这种情况下生成一个查询集 person_set 并且这个对象包含所有的人员对象。

 person_set = Person.objects.all()

 print(person_set)

这是输出。

 <QuerySet [<Person: Person object (7)>, <Person: Person object (8)>, <Person: Person object (9)>]>

如果它没有命中数据库,那么它如何知道数据库中有哪些记录?因为它应该只在使用循环或其他方法评估时运行查询。

【问题讨论】:

    标签: django database django-queryset


    【解决方案1】:

    打印查询集正在评估它,以构建对象的字符串表示。

    【讨论】:

    • 所以查询集基本上只是一个原始的 sql。是吗?
    • 还有更多,但是是的,在某些时候它会被转换为发送到数据库的 SQL 查询。
    【解决方案2】:

    您可以在此处查看 QuerySet 命中数据库的所有情况:https://docs.djangoproject.com/en/2.2/ref/models/querysets/#when-querysets-are-evaluated

    其中一个是repr(),当您打印查询集时会调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2020-08-26
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多