093:QuerySet API详解-QuerySet转换为SQL的条件
Posted zheng-weimin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了093:QuerySet API详解-QuerySet转换为SQL的条件相关的知识,希望对你有一定的参考价值。
QuerySet API详解-QuerySet转换为SQL的条件:
生成一个 QuerySet 对象并不会马上转换为 SQL 语句去执行。比如我们获取 Book 表下所有的图书:
books = Book.objects.all() print(connection.queries)
我们可以看到在打印 connection.quries 的时候打印的是一个空的列表。说明上面的 QuerySet 并没有真正的执行。
在以下情况下 QuerySet 会被转换为 SQL 语句执行:
1、迭代:在遍历 QuerySet 对象的时候,会首先先执行这个 SQL 语句,然后再把这个结果返回进行迭代。比如以下代码就会转换为 SQL 语句:
for item in books: print(item.name)
2、使用步长做切片操作: QuerySet 可以类似于列表一样做切片操作。做切片操作本身不会执行 SQL 语句,但是如果如果在做切片操作的时候提供了步长,那么就会立马执行 SQL 语句。需要注意的是,做切片后不能再执行 filter 方法,否则会报错;
books = Book.objects.get_queryset()[1:2:2]
3、调用 len 函数:调用 len 函数用来获取 QuerySet 中总共有多少条数据也会执行 SQL 语句;
print(len(books))
4、调用 list 函数:调用 list 函数用来将一个 QuerySet 对象转换为 list 对象也会立马执行SQL语句;
print(list(books))
5、判断:如果对某个 QuerySet 进行判断,也会立马执行 SQL 语句;
if books: print("bababa")
以上是关于093:QuerySet API详解-QuerySet转换为SQL的条件的主要内容,如果未能解决你的问题,请参考以下文章
091:QuerySet API详解-update和delete
079:Django数据库QuerySet API详解-filterexcludeannotate