上篇博客主要讲了django中对数据库的增删改查,下面深入再讲解下对数据库的操作。

常用的查询方法

下面以表名为User为例

  • User.object.first() :返回表中第一条数据
  • User.object.last():返回表中的最后一条数据
  • User.object.get():指定条件,返回满足条件的唯一一条数据

first、last、get方法得到的都是一条数据,返回的是一个模型对象。

  • User.object.filter():指定条件,过滤掉不满足条件的。
  • User.object.exclude():指定条件,过滤掉满足条件的,与filter方法正好相反。
  • User.object.all():返回表中所有数据,可加入参数,指定返回的字段。
  • User.object.order_by():加入字段名为参数,可加入多个字段名,默认是正向排序,在字段名前加上负号表示逆向排序。
  • User.object.reverse():对排序结果进行反转
  • User.object.distint():对结果去重,常配合value方法使用。
  • User.object.all().values():将all返回的QuerySet的moodel转为字典。

下面是all方法和value方法得到的,下面看看其和转成字典的对比。

以上这些方法返回的是QuerySet对象。

  • User.object.exists():判断查询的数据是否存在

返回的是bool类型

  • User.object.count():返回当前查询到的数据总数

返回的int类型

QuerySet对象支持索引和切片,映射于sql的limit。

常用查询条件

查询条件常用于filter方法。语法规则为:User.object.filter(字段名__条件关键词 = 条件值),下面对这个条件关键词加以总结。

  • exact,相当于等于,iexact也是等于,不同的是他是忽略大小写的。
  • gt,相当于大于号。
  • gte,相当于大于等于号。
  • lt,相当于小于号。
  • lte,相当于小于等于号。
  • contains,包含关系,指的是字段值是否包含指定的字符或数字。icontains也是忽略大小写的。
  • startwith,判断是否以指定值开头。istartswith忽略大小写。
  • endwith,判断是否以指定值结尾。iendswith忽略大小写。
  • in,成员所属关系。
  • range,判断是否在指定的范围中,范围是左闭右闭的。
  • isnull,判断是否为空,值为True或False。

常用字段类型

  • IntegerField,映射于数据库的整型int。
  • CharField,单行字符串字段类型,必填参数是max_length,映射于数据库的varchar。
  • TextField,多行文本字段,映射于数据库的longtext。
  • FloatField、DecimalField,二者都是存放小数的类型,映射于数据库的float、decimal。
  • DateField、DateTimeField,一个是日期类型,另一个是日期时间类型,映射于数据库的date和datetime。
  • BooleanField,bool类型,映射于数据库的tinyint。
  • AutoField,是一个自增长的int类型。
  • OneToOneField,一对一关系的关联。
  • ForeignKey,一对多的关系关联。
  • ManyToManyField,多对多的关系关联。

以下是相对不是很常用的字段类型

  • EmailField,电子邮件
  • URLField,用于存放url地址
  • BinaryField,存放原始二进制的字段,映射于数据库的binary。
  • FileField,上传文件的字段。
  • ImageField,是FileField的子类,用于图片存放的字段。

Field的常用参数

  • primary_key:指定是否为主键。
  • unique:指定是否唯一。
  • null:指定是否为空,默认是False。
  • unique_for_date:指定日期唯一。
  • blank:等于True时,表单form验证可以为空,默认是False。
  • DateField.auto_now:每次修改都将更新时间进去,但只有Model.save()方法才能调用这个,QuerySet.update()方法不会调用。
  • DateField.auto_now_add:第一次创建这个字段时将此时时间添加进去,以后不会修改这个值。

下面实现一个表关系的例子,有四张表,分别是一对一的学生表和学生详细表,一对多的学生表和学院表,多对多的学生表和课程表。

下图是对四张表的创建模板类

创建完模板类保存上传后再执行python manage.py makemigrations和python manage.py migrate两条命令来将模板类写进数据库中。



下面分别看看五张表的结构,为什么是五张表呢?不是四张吗?

我们知道的是,两张表的多对多关系需要一张第三张表来关联,而django会为我们自动创建这么一张表。

下面这张表就是django为我们自动创建的第三张表。他将student_id和course_id分别于学生表和课程表相关联。

Django模型基础——(二)的更多相关文章

  1. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  2. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  3. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  4. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  5. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  6. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  7. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  8. Django 学习第六天——Django模型基础第一节

    一.Django 的 ORM 简介: Django的ORM系统的分析: 1.ORM 概念:对象关系映射(Object Relational Mapping,简称ORM) 2.ORM的优势:不用直接编写 ...

  9. 六、Django模型基础第一节

    1 数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 '; grant all on *.* to 'xiang ...

  10. django模型系统二

    常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...

随机推荐

  1. Mac安装软件提示破损

    安装提示破损 zhong终端输入 sudo spctl --master-disable 就可以顺利打开啦

  2. 洛谷P1002——过河卒

    又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...

  3. 5款国内免费CDN服务商及使用点评

    第一款,百度加速乐 加速乐目前被百度收购,这样百度也有了自己运营的CDN产品,可以丰富自身站长平台工具使用用户群.目前有免费用户和付费用户的区别,对于一般的网站免费方案也足够使用.特点具备智能解析.加 ...

  4. 洛谷 三月月赛 C

    呵呵呵呵,这个sb题做了好久,然并卵,还是不对. 挖坑++ 然而我感觉我做的对了,偷瞄了一下题解应该没什么问题. 这个题有n个点,n条边,所以是个基环树(我也不知道是不是这个名) 要每个点有联通,就是 ...

  5. 114-PHP判断类变量是否相同

    <?php class ren{ //定义人类 } class mao{ //定义人类 } $ren=new ren(); //实例化人类的对象 $ren_a=new ren(); //实例化人 ...

  6. javaweb 最简单的分页技术

    原文来自于https://www.cnblogs.com/xwlych/p/6017833.html 个人由加了一点注释,他的代码我运行不起来,弄了好一会 bean包  User.java packa ...

  7. 【剑指Offer】面试题18. 删除链表的节点

    题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...

  8. P 1023 组个最小数

    转跳点:

  9. 每天一点点之vue框架开发 - History 模式下线上路由报404错误

    vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 如果不想要很丑的 hash,我们可以用路由的 his ...

  10. springboot + shiro+登录 微信登录 次数验证资料

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助,点击查看教程. 1.https://blog.csdn.net/xtiawxf/article/details/5 ...