内容概要

  • 查询关键字

    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. CAS指令

    原文链接:https://www.jianshu.com/p/00edb3d74a33   CAS是CPU的一条指令,其具有原子性,原子性是由CPU硬件层面保证的.   CAS原语有三个操作数--内存 ...

  2. MySQL|一文解决主库已有数据的主从复制

    主从复制配置方案和实际的场景有很多,在之前配置了主从库都是全新的配置方案 在这一篇会配置主库存在数据,然后配置主从复制 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础 ...

  3. JAVA中Abstract到底有什么用?都用在哪些方面比较合适?

    功能向上聚合 Abstract作为抽象类和抽象方法,第一种情况是在聚合子类的通用性上起到作用,往往出现在重构过程中自然而然形成的一种层次结构-希望将多个子类的通用方法和逻辑提取到父层的抽象类. 这种重 ...

  4. 利用实体bean对象批量数据传输处理

    利用实体bean对象批量数据传输处理 需求 现在有两方数据库表结构相同,一方A.另一个方B,现想从A处查询出多个表的数据,传输到B地保存起来. 解决方案1 最简单粗暴的方法就是,查询出A处相关表的数据 ...

  5. Windows 程序自动更新方案: Squirrel.Windows

    Windows 程序自动更新方案: Squirrel.Windows 1. Squirrel Squirrel 是一组工具和适用于.Net的库,用于管理 Desktop Windows 应用程序的安装 ...

  6. Win7通过cmd进入d盘的方法

    Win7通过cmd进入d盘的方法 时间:2016-05-13 15:06:03 作者:yunchun 来源:系统之家  手机查看 评论 我们在使用Win7系统过程中,对于经常使用DOS程序的朋友们来说 ...

  7. Iperf3网络性能测试工具详解教程

    Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...

  8. 安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7

    安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7 由于在tools/bin目录中只有ia64-linux,所以在直接运行./install.sh脚本时,系统会 ...

  9. Could not open device at /dev/ipmi0

    Could not open device at /dev/ipmi0 分类: LINUX 2013-09-02 17:01:37   Could not open device at /dev/ip ...

  10. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...