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. 分层图初探 By cellur925

    因为最近测试遇到了分层图的题目,所以稍微学了一下==. 这种题目一般是来解决最短路边权有变化/有k条免费路的问题的.他们基本都一般有两种实现方式:dp+最短路/分层图+最短路 当然你如果非要说他们是一 ...

  2. hdu1301 Jungle Roads 基础最小生成树

    #include<iostream> #include<algorithm> using namespace std; ; int n, m; ]; struct node { ...

  3. 跟我一起玩Win32开发(23):渐变颜色填充

    GradientFill函数可以对特定的矩形区域或者三角形区域进行渐变颜色的填充.我们先来看看GradientFill函数到底长得什么样子,帅不帅. BOOL GradientFill( _In_   ...

  4. 【bzoj2084】[Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1205  Solved: 756[Submit ...

  5. 洛谷p2234/BZOJ1588 [HNOI2002]营业额统计

    题目链接: 洛谷 BZOJ 分析: 好像没有什么好说的就是一个平衡树的板子--唯一要注意的就是这里要找的并不是严格的前驱和后继,因为如果找到之前某一天的营业额和它相等那么差就是0,所以我们仍然在结构体 ...

  6. Android利用tcpdump抓包,用wireshark分析包。

    1.前言 主要介绍在android手机上如何利用tcpdump抓包,用wireshark分析包. android tcpdump官网: http://www.androidtcpdump.com/ t ...

  7. h5-16-SVG 与 HTML5 的 canvas 各自特点

    1. Canvas是使用JavaScript程序绘图(动态生成),SVG是使用XML文档描述来绘图.2.SVG更适合用来做动态交互,而且SVG绘图很容易编辑,只需要增加或移除相应的元素就可以了.同时S ...

  8. Varnish快速安装及测试

    实验环境: slave-147:   192.168.75.147 slave-148:    192.168.75.148 两台机器均已关闭selinux,关闭iptables. varnish部署 ...

  9. php Try Catch多层级异常测试

    <?php class a { public function a1 () { try { throw new Exception('123'); } catch (Exception $e) ...

  10. AJPFX关于Java内部类及其实例化

    public class Outer {    private int size;    public class Inner {        private int counter = 10;  ...