Python Django orm操作数据库笔记之QuerySet API
什么时候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的更多相关文章
- Python Django orm操作数据库笔记之外键和表关系
外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...
- Django ORM操作数据库常用API
昨天晚上,我们完成了一个简单的实例来对数据库表进行操作.今天,我们要熟悉更多的API,实现更复杂的功能.这一步完成了,我们对小型数据的操作问题也就不大了. 现在,我们还是参考django官方文档,来进 ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- [oldboy-django][2深入django]ORM操作
推荐学习博客:http://www.cnblogs.com/wupeiqi/articles/6216618.html 需求: 汇总django orm操作,代替原生mysql语句来操作数据库:里面内 ...
- python——django使用mysql数据库(二)
上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...
- python——django使用mysql数据库(一)
之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...
- 数据库开发-Django ORM的数据库迁移
数据库开发-Django ORM的数据库迁移 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. Django 项目准备 1>.安装django包 pip install d ...
- python MySQLdb用法,python中cursor操作数据库(转)
数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_N ...
- python高级之操作数据库
python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...
随机推荐
- TestMap
public class TestMap { public static void main(String[] args) { Map map=new HashMap(); //在此映射中关联指定值与 ...
- hdoj4871
5 4 21 2 12 3 23 4 34 5 2
- mysql添加字段语句
1.添加 varchar类型的字段: alter table b_warehouse_message add column entity_warehouse_no_test varchar(48) C ...
- 2015-10-19 sql1
SQL SERVER(一) 一.设置登陆验证 1.右键点击数据库->属性->安全性设置密码登陆 2.数据库下找到安全性->登录名->sa,右键点击sa->属性(修 ...
- angular4,6 引入第三方插件的方法
话不多说直入主题,最常见的有三种方式来引用第三方插件,下面以jquery插件及基于JQuery的两款插件:nicescroll和rangeSlider为例. 一.第一种方式:在.angular-cli ...
- gcc4.9.1新特性
C family Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=a ...
- Android动画-View动画
View动画 Android动画分为三类:View动画,帧动画,和属性动画.帧动画也是View动画的一种. View动画的作用对象是View,之所以强调这一点是因为其作用对象有别于Android的另一 ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- linux c++ curl 根据IP地址获得当前网络的所在的地理位置
注意: 可能每个电脑的默认中文编码格式不同,有时会出现乱码,需要对返回内容进行编码转换,或者换成可指定编码格式的接口.如 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/c ...
- C#获取程序运行时间
需要用到System.Diagnostics名称空间中的Stopwatch类! Stopwatch类其中有一个属性ElapsedMilliseconds.该属性是获取当前运行时间,以毫秒为单位! 其中 ...