什么时候Django会将QuerySet转换为SQL去执行:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33867131/article/details/82754436

 生成一个QuerySet对象并不会马上转换为SQL语句去执行。

比如我们获取Book表下所有的图书:

books = Book.objects.all()
print(connection.queries)
打印的是一个空的列表,说明上面的QuerySet并没有真正的执行sql语句

在以下情况下QuerySet会被转换为SQL语句执行:

1、迭代:在遍历QuerySet对象的时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。比如以下
代码就会转换为SQL语句:
 for book in Book.objects.all():
     print(book)

2、使用步长做切片操作:QuerySet可以类似于列表一样做切片操作。做切片操作本身不会执行SQL语句,但是如
果如果在做切片操作的时候提供了步长,那么就会立马执行SQL语句。需要注意的是,做切片后不能再执行filter方法,否则会报错。

3、调用len函数:调用len函数用来获取QuerySet中总共有多少条数据也会执行SQL语句。

4、调用list函数:调用list函数用来将一个QuerySet对象转换为list对象也会立马执行SQL语句。

5、判断:如果对某个QuerySet进行判断,也会立马执行SQL语句。

猜你喜欢

转载自blog.csdn.net/qq_33867131/article/details/82754436