内容概要

  • 查询关键字

    MySQL
    select
       from
       where
       group by
       having
       order by
       distinct
       limit
       regexp
       # SQL语句内也支持写流程控制
    Django ORM
  • 神奇的双下线查询

  • 多表查询

    子查询
    基于对象的跨表查询
    连表操作
    基于双下划线的跨表查询
    ps:ORM远比SQL语句简单
  • 分组与聚合

  • F与Q查询

  • ORM查询优化(only与defer...)

  • ORM字段补充

内容详细

1 关键字

   # 增     1.create()
# models.Books.objects.create(title='三国演义',price=456.23)
# models.Books.objects.create(title='水浒传',price=876.45)
# models.Books.objects.create(title='聊斋志异',price=123.69)
# models.Books.objects.create(title='草堂笔记',price=456.96)

# 查 2.all()
# res = models.Books.objects.all()
# print(res) # QuerySet对象
# print(res.query) # 只要是QuerySet对象就可以点query查看内部SQL语句

# 查 3.filter()
# res1 = models.Books.objects.filter() # pk特指当前表的主键字段
# print(res1) # QuerySet对象
# print(res1.query)
# print(res1.first()) # 获取列表中第一个数据对象
# print(res1.last()) # 获取列表中最后一个数据对象

# 4.values与5.values_list
# res2 = models.Books.objects.values('title','price')
# print(res2) # QuerySet对象 可以看成列表套字典
# print(res2.query)

# res3 = models.Books.objects.values_list('title','price')
# print(res3) # QuerySet对象 可以看成列表套元祖
# print(res3.query)

# 6.查 get() 不推荐使用
# res4 = models.Books.objects.get(pk=1)
# print(res4) # 数据对象
# res5 = models.Books.objects.get(pk=100)
# print(res5) # 数据对象
# res6 = models.Books.objects.filter(pk=100)
# print(res6) # 数据对象

# 7.取反 exclude()
# res7 = models.Books.objects.exclude(pk=1)
# print(res7) # QuerySet
# print(res7.query)


# 8.排序 order_by() 默认是升序(asc) 字段前面加负号降序(desc)
# res8 = models.Books.objects.order_by('price')
# res8 = models.Books.objects.order_by('-price')
# select * from books order by price desc,price asc;
# res8 = models.Books.objects.order_by('-price','price')
# print(res8) # QuerySet对象
# print(res8.query)


# 9.反转 reverse() 必须先有顺序才可以反转
# res9 = models.Books.objects.all()
# res9 = models.Books.objects.order_by('price').reverse()
# print(res9)

# 10.去重 distinct()
# res10 = models.Books.objects.all().distinct()
# res10 = models.Books.objects.values('title','price').distinct()
# print(res10)

# 11.计数 count()
# res11 = models.Books.objects.count()
# print(res11) # 6

# 12.判断是否有数据 exists()
# res12 = models.Books.objects.filter(pk=999).exists()
# print(res12) # False

# 13.update()
# 14.delete()

2 神奇的双下划线

  
# 查询价格大于200的书籍
# res = models.Books.objects.filter(price__gt=200)
# print(res)
# res1 = models.Books.objects.filter(price__lt=200)
# print(res1)
# res2 = models.Books.objects.filter(price__gte=456.23)
# print(res2)
# res3 = models.Books.objects.filter(price__lte=456.23)
# print(res3)

# 成员运算
# res4 = models.Books.objects.filter(price__in=(456.23,111))
# print(res4)
# 范围查询
# res5 = models.Books.objects.filter(price__range=(100,456.23))
# print(res5)
# 模糊查询
# 查询书籍名称中含有字母a的书
# res6 = models.Books.objects.filter(title__contains='a')
# print(res6) # 区分
# res7 = models.Books.objects.filter(title__icontains='a')
# print(res7) # 忽略

# 日期相关
# 查看出版月份是五月的书
# res8 = models.Books.objects.filter(publish_time__month=5)
# print(res8)
# print(res8.query)
# res9 = models.Books.objects.filter(publish_time__year=2021)
# print(res9)

3 外键字段增删改查

    # 增
# models.Book.objects.create(title='三国演义',price=345.43,publish_id=1)
# models.Book.objects.create(title='红楼梦',price=678.31,publish_id=2)

# publish_obj = models.Publish.objects.filter(pk=2).first()
# models.Book.objects.create(title='三国演义',price=345.43,publish=publish_obj)
# models.Book.objects.create(title='七龙珠',price=908.43,publish=publish_obj)

# 改
# models.Book.objects.filter(pk=2).update(publish_id=1)
# models.Book.objects.filter(pk=2).update(publish=publish_obj)

# 删 级联更新级联删除
# models.Publish.objects.filter(pk=1).delete()


# 多对多
# book_obj = models.Book.objects.filter(pk=3).first()
# 绑定关系
# book_obj.authors.add(1) # 去书与作者的关系表中绑定关系
# book_obj.authors.add(1,2) # 去书与作者的关系表中绑定关系
# book_obj.authors.add(author_obj1)
# book_obj.authors.add(author_obj1,author_obj2)

# 修改关系
# book_obj.authors.set([1,])
# book_obj.authors.set([1,2])
# book_obj.authors.set([author_obj,])
# book_obj.authors.set([author_obj1,author_obj2])

# 移除关系
# book_obj.authors.remove(1)
# book_obj.authors.remove(1,2)
# book_obj.authors.remove(author_obj,)
# book_obj.authors.remove(author_obj1,author_obj2)

# 清空关系
# book_obj.authors.clear()

Django基础之模型层(01)的更多相关文章

  1. Django基础之模型层(02)

    1 重要概念 # 多表查询 """ 正向查询 反向查询 当前查询对象是否含有外键字段 如果有就是正向 没有无则是反向 口诀: 正向查询按外键字段 多对多需要额外再加一个. ...

  2. Django基础(3)----模型层-单表操作,多表创建

    昨日内容回顾: 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} { ...

  3. Django基础之模型层(下)

    聚合查询 关键字:aggregate from django.db.models import Max,Min,Sum,Count,Avg 统计所有书的平均价格 models.Book.objects ...

  4. Django基础之模型(models)层(上)

    目录 Django基础之模型(models)层 单表查询 必知必会13条 神奇的双下划线查询 多表查询 外键的字段的增删改查 表与表之间的关联查询 基于双下划线的跨表查询(连表查询) 补充知识 Dja ...

  5. Django的日常-模型层(2)

    目录 Django的日常-模型层(2) 几种常用的查询方式 聚合查询 分组查询 F和Q查询 查询优化相关 orm中常见字段 choices参数 orm的事务操作 Django的日常-模型层(2) 几种 ...

  6. Django的日常-模型层(1)

    目录 Django的日常-模型层(1) 模型层 django测试环境 ORM查询 Django的日常-模型层(1) 模型层 模型层其实就是我们应用名下的models.py文件,我们在里面写入想要创建的 ...

  7. Django学习之模型层

    模型层 查看orm内部sql语句的方法的方法 1.如果是queryset对象,那么可以点query直接查看该queryset的内部sql语句 2.在Django项目的配置文件中,配置一下参数即可实现所 ...

  8. Django基础之模板层

    内容概要 模板层(模板语法) 模板语法传值​模板语法过滤器(内置方法)​模板语法标签(流程控制)​自定义过滤器和标签(了解) 模板的导入与继承(面向对象) 内容详细 1 模板层之模板语法传值 http ...

  9. Django基础之路由层

    内容概要 路由匹配 无名有名分组 反向解析 无名有名分组反向解析(难理解) 路由分发 名称空间 伪静态 内容详细 1 路由匹配 urls.py url()方法第一个参数其实是一个正则表达式 第一个参数 ...

随机推荐

  1. restful 与 webapi 详解

    restful 什么是API API全称Aplication Programming Itererface即应用程序编程接口, 我们在开发应用程序时经常用到.API作为接口,用来"连接&qu ...

  2. 2020 ICPC EC Final西安现场赛游记

    也不知道从何说起,也不知道会说些什么,最想表达的就是很累很累. 从第一天去的时候满怀希望,没什么感觉甚至还有一些兴奋.到后来一直在赶路,感觉很疲惫,热身赛的时候觉得马马虎虎,导致热身赛被咕.然后教练就 ...

  3. C#·JSON的处理和解析

    阅文时长 | 0.34分钟 字数统计 | 309.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『C#·JSON的处理和解析』 编写人 | SCscHero 编写时间 | 2021 ...

  4. [Qt] 事件机制(二)

    在samp4_1中加一个小功能,点击右上角关闭按钮时,弹出"确认是否关闭"的消息框.如果点"yes"则关闭,如果点"No"则不关闭 在wid ...

  5. VMware vCenter重置web console SSO登录密码

    On a Windows Platform Services Controller or vCenter Server with Embedded Platform Services Controll ...

  6. vimdiff env.txt export.txt set.txt

    1. 环境变量 简单理解了变量的概念,就很容易理解环境变量了.环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程.在所有的 UNIX 和类 UNIX 系统中,每个进程 ...

  7. dmidecode -t1 | egrep "Manufacturer|Product Name"

    # dmidecode -t1 | egrep "Manufacturer|Product Name" Manufacturer: Loongson Product Name: L ...

  8. Linux服务之DHCP服务篇(scp)

    一.概念 名称:DHCP----Dynamic Host Configuration Protocol 动态主机配置协议 功能:DHCP是一个局域网的网络协议,使用UDP协议工作 主要用途:给内部网络 ...

  9. Scala 中的可变(var)与不可变(val)

    引言 Scala 中定义变量分为 var(可变变量)和 val(不可变变量) Scala 中集合框架也分为可变集合和不可变集合.比如 List(列表) 和 Tuple(元组)本身就是不可变的,set ...

  10. Java 进制及转换

    Java 整型的表现形式 Java 数据类型中有四种整型,分别是 byte.short.int.long,而整型定义下的数据还会按进制来区分: 十进制整数:都是以 0-9 这九个数字组成,不能以 0 ...