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

根据Django的数据库机制,对于QuerySet来说,当QuerySet被第一次构建,然后又调用他的filter方法,接着在对其进行切片操作的过程中,Django其实并没有去访问数据库。只有当你对QuerySet进行求值时,Django才会去访问数据库。

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

迭代:在遍历QuerySet对象的时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。比如以下代码就会转换为SQL语句:

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

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

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

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

1.defer和only方法

这两个方法都是返回一个QuerySet对象,并且这个QuerySet对象包裹的是相应的模型,而不是字典,且使用这两个方法过滤或只提取某几个字段后,再使用已被过滤或者未提取的某个字段时,系统会重新发送一次查询请求。因此要慎重操作。

defer:过滤相应字段(一个或多个)

only:只提取相应字段(一个或多个)

2.get

作用是获取满足条件的一条数据,需要注意的是该函数只能令其返回有且只有一条数据,因此如果给出的条件有多条数据满足那么这个方法将会抛出MultipleObjectsReturned错误,如果没有数据满足,那么将会抛出DoesNotExit错误。

3.create

创建一条数据,并将其保存到数据库中

4.get_or_create

根据某个条件进行查找,如果找到了那么就返回这条数据,如果没有查找到,那么就创建一个。

5.bulk_create

可以接收一个列表参数,并根据列表内元素一次性创建多条数据。通过该方法向数据库插入数据时仅生成一条SQL语句。

6.distinct

去除掉那些重复的数据。这个方法如果底层数据库用的是MySQL,那么不能传递任何的参数。需要注意的是distinct方法判断数据是否重复的依据是数据中的每一个字段都同。

7.切片操作

QuerySet使用切片操作就跟列表使用切片操作是一样的。示例代码如下:

books = Book.objects.all()[1:5:2]

切片操作并不是把所有数据从数据库中提取出来再做切片操作。而是在数据库层面使用LIMIE和OFFSET来帮我们完成。

Python Django orm操作数据库笔记之QuerySet API的更多相关文章

  1. Python Django orm操作数据库笔记之外键和表关系

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...

  2. Django ORM操作数据库常用API

    昨天晚上,我们完成了一个简单的实例来对数据库表进行操作.今天,我们要熟悉更多的API,实现更复杂的功能.这一步完成了,我们对小型数据的操作问题也就不大了. 现在,我们还是参考django官方文档,来进 ...

  3. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  4. [oldboy-django][2深入django]ORM操作

    推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...

  5. python——django使用mysql数据库(二)

    上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...

  6. python——django使用mysql数据库(一)

    之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...

  7. 数据库开发-Django ORM的数据库迁移

    数据库开发-Django ORM的数据库迁移 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. Django 项目准备 1>.安装django包 pip install d ...

  8. python MySQLdb用法,python中cursor操作数据库(转)

    数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_N ...

  9. python高级之操作数据库

    python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...

随机推荐

  1. TestMap

    public class TestMap { public static void main(String[] args) { Map map=new HashMap(); //在此映射中关联指定值与 ...

  2. hdoj4871

    5 4 21 2 12 3 23 4 34 5 2

  3. mysql添加字段语句

    1.添加 varchar类型的字段: alter table b_warehouse_message add column entity_warehouse_no_test varchar(48) C ...

  4. 2015-10-19 sql1

        SQL SERVER(一) 一.设置登陆验证 1.右键点击数据库->属性->安全性设置密码登陆 2.数据库下找到安全性->登录名->sa,右键点击sa->属性(修 ...

  5. angular4,6 引入第三方插件的方法

    话不多说直入主题,最常见的有三种方式来引用第三方插件,下面以jquery插件及基于JQuery的两款插件:nicescroll和rangeSlider为例. 一.第一种方式:在.angular-cli ...

  6. gcc4.9.1新特性

    C family Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=a ...

  7. Android动画-View动画

    View动画 Android动画分为三类:View动画,帧动画,和属性动画.帧动画也是View动画的一种. View动画的作用对象是View,之所以强调这一点是因为其作用对象有别于Android的另一 ...

  8. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  9. linux c++ curl 根据IP地址获得当前网络的所在的地理位置

    注意: 可能每个电脑的默认中文编码格式不同,有时会出现乱码,需要对返回内容进行编码转换,或者换成可指定编码格式的接口.如  搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/c ...

  10. C#获取程序运行时间

    需要用到System.Diagnostics名称空间中的Stopwatch类! Stopwatch类其中有一个属性ElapsedMilliseconds.该属性是获取当前运行时间,以毫秒为单位! 其中 ...