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. Ubuntu 18.04 LTS 安装后 各种问题以及解决方案

    1. root的初始密码,默认是不知道的,需要进行设置 a. 进入终端自己的用户 b. 输入 sudo passwd回车 c. 输入新密码,回车,重复,回车,搞定 d. su 一下,就可以了 2.  ...

  2. Item

    抓取的主要目标是从非结构化源(通常是网页)中提取结构化数据 ScrapySpider可以以python字典的形式返回提取的数据,这很方便和熟悉 但python dicts缺乏结构,很容易在字段名中输入 ...

  3. HDU 4366 Successor 分块做法

    http://acm.hdu.edu.cn/showproblem.php?pid=4366 今日重新做了这题的分块,果然是隔太久了,都忘记了.. 首先,用DFS序变成一维的问题 关键是它有两个权值, ...

  4. 启动azkaban时出现User xml file conf/azkaban-users.xml doesn't exist问题解决(图文详解)

      问题详情 [hadoop@master azkaban]$ ll total drwxrwxr-x hadoop hadoop May : azkaban- drwxrwxr-x hadoop h ...

  5. Suricata里的规则与Snort区别之处

    不多说,直接上干货! 见官网 https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html

  6. mybatis javaConfig实现

    @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessio ...

  7. 通用maper无法获取实体类com.qmtt.model.PhWxUser对应的表名问题

    spring boot在采用了热加载后,可能会出现“无法获取实体类com.qmtt.model.PhWxUser对应的表名!”的异常, 解决办法 在resources新建一个文件夹META-INF,新 ...

  8. MySQL读写分离实现

    数据库写入效率要低于读取效率,一般系统中数据读取频率高于写入频率,单个数据库实例在写入的时候会影响读取性能,这是做读写分离的原因.实现方式主要基于mysql的主从复制,通过路由的方式使应用对数据库的写 ...

  9. Oracle创建用户及权限设置

    oracle用户创建及权限设置 权限: create session create table unlimited tablespace connect resource dba 例: #sqlplu ...

  10. 记 thoughtworks 的一次面试

    2015年的1月30号,星期五.我将要去thoughtworks面试. 最早听说thoughtworks是在学校听同学说起的.一句不经意间的引导可能会改变我的整个人生. 实话说,我之前对thought ...