1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types

2.字段的常用参数 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options

3.常用查询 通过模型类上的管理器来构造QuerySet。

模型类上的管理器是啥? ​ 模型类.objects,<django.db.models.manager.Manager>实例

  • QuerySet 表示数据库中对象的集合。 等同于select 语句。 惰性的,不会立刻操作数据库,在计算,循环,切片,索引时会执行select语句. 案例:

    • first() 获取第一条 返回的是对象

    • last() 获取最后一条 返回的也是一个对象 思考:排序规则? 默认通过主键。通过_meta 设置

    • get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合,报错.

    • all() 获取所有记录 返回的是queryset

    • filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。

    • exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。

    • 多条件的OR连接 用到Q对象,django.db.models.Q 例子: Students.objects.filter(Q(age=18)|Q(age=19))

    • values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。 例子:Students.objects.values('name','age')

    • only(*fields) 返回querySet ,对象列表,注意only一定包含主键字段,在实际开发过程中比较常用,可以灵活取值.

    • defer(*fields) 指定想要排除的字段.返回一个QuerySet,作用和only相反.

    • order_by(*fields) 根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序

    • 切片 和python的列表切片用法相似,支持步长,不支持负索引,数据量大时尽量不用步长,速度慢. 切片过后,不再支持,附加过滤条件与排序,因为已经执行返回列表. 例子:Students.objects.all()[:5:2]

  • 常用查询条件 filter,exclude, get,

  • 加两个下划线使用,如name__contains.

    • exact 准确匹配

    • iexact 不区分大小写,query中是LIKE

    • contains 包含,query中的BINARY是区分大小写.

    • icontains 不区分大小写包含.

    • in 参数为列表,元组或query_set

    • range 范围

    • gt 大于

    • gte 大于等于

    • lt 小于

    • lte 小于等于

    • startswith 开始是

    • istartswith 不区分大小写开始是

    • endswith 结尾是

    • iendswith 不区分大小写结尾是

    • isnull True, False 对应 IS NULL, IS NOT NULL

  • 聚合 from django.db.models import Count, Avg, Max, Min, Sum 通过queryset的aggregate方法 Student.objects.aggregate(age_avg=Avg('age')) # 计算平均年龄,age_avg生成一个key.

    • count

    • 平均值 Avg

  • 分组,聚合 结合 Values,annotate 和聚合方法一起实现 查询男生有几个,女生有几个

  • from django.db.model. import Count

  • Student.objects.values('sex').annotate(num=Count('sex'))

  • 4.表关系实现

常用的查询方法:

常用的查询条件:

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着连个下划线哦)

常用的字段类型映射关系:

常用的字段类型:

  1. IntegerField : 整型,映射到数据库中的int类型。

  2. CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。

  3. TextField: 文本类型,映射到数据库中的text类型。

  4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。

  5. DateField: 日期类型,没有时间。映射到数据库中是date类型,

    在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。

  6. DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,

    在使用的时候,传递datetime.datetime()进去。

Field的常用参数:

primary_key: 指定是否为主键。

unique: 指定是否唯一。

null: 指定是否为空,默认为False。

blank: 等于True时form表单验证时可以为空,默认为False。

default: 设置默认值。

DateField.auto_now: 每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。

DateField.auto_now_add: 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

1.创建模型类

2.执行生成映射文件的命令后,查看数据表

3.插入数据.

4.查看插入的数据.

表关系的实现:

表关系的例子:

创建模型类:

外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错!

一般使用CASCADE表示级联删除

查看数据库中创建的表:

写好模型类后,执行生成映射文件的命令.

执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField

方法自动生成了关系表.

Django框架基础知识07-常用查询及表关系的实现的更多相关文章

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

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

  2. Django框架基础知识08-表关联对象及多表查询

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...

  3. 七、Django模型基础第二节——常用查询

    1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...

  4. Django框架基础知识01-配置环境

    Django框架 Django是个怎样的东西呢? Web应用框架----Django  http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...

  5. Django框架基础知识06-模型基础

    1.数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 有创建数据库权限的用户 创建数据库 crm 修改配置 se ...

  6. Django框架基础知识12-中间件及上下文处理器

    Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...

  7. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  8. Django入门--模型系统(二):常用查询及表关系的实现

    1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...

  9. Django框架基础知识13-auth系统

    我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...

随机推荐

  1. hdu1151 Air Raid 基础匈牙利

    #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> ...

  2. 跟我一起玩Win32开发(22):抓取屏幕

    关于如何拷贝屏幕并保存,这里已经有现成的例子,我也不必去Copy人家了,我一向不喜欢Copy.这里有一个完整的例子,可以看看. http://msdn.microsoft.com/EN-US/libr ...

  3. LIS(变形) HDOJ 5489 Removed Interval

    题目传送门 题意:求删掉连续L长度后的LIS 分析:记rdp[i]表示以a[i]为开始的LIS长度,用nlogn的办法,二分查找-a[i].dp[i]表示以a[i]为结尾并且删去[i-L-1, i-1 ...

  4. jQuery attr() 源码解读

    我们知道,$().attr()实质上是内部调用了jQuery.access方法,在调用时jQuery.attr作为回调传入.在通过种种判断(参看jQuery.access()方法)之后,取值和赋值最后 ...

  5. empty 和 isset的区别和联系

    empty 和 isset的区别和联系 要说它们的联系,其共同点就是empty()和isset()都是变量处理函数,作用是判断变量是否已经配置,正是由于它们在处理变量过程中有很大的相似性,才导致对它们 ...

  6. mybatis generator 整合lombok

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  7. AJPFX谈Java 性能优化之基本类型 vs 引用类型

    ★名词定义 先明确一下什么是“基本类型”,什么是“引用类型”. 简单地说,所谓基本类型就是 Java 语言中如下的8种内置类型: booleancharbyteshortintlongfloatdou ...

  8. 微信小程序 可用性一览

    1. 调试vConsole微信小程序通过vConsole的形式观察控制台打印.打印到vConsole控制台的是由 JSON 转化的字符串.这还是可以起到调试作用的. Source Map当es6 转  ...

  9. 801硬件检测工具DragonHD的使用

    801硬件检测工具DragonHD的使用 2018/11/28 13:39 版本:V1.0 开发板:SC3817R 1.客户要认证器件,使用了全志官方的工具:DragonHD.exe 打开之后可以见用 ...

  10. docker上配置nginx负载均衡

    采用ubuntu系统,docker安装自行百度 1.安装tomcat docker run -d -p : tomcat docker run -d -p : tomcat 安装两个实例,端口分别为8 ...