django初步了解4
django单表查询
必知必会13条
1.all() 查询所有 QuerySet
res=models.Book.objects.all()#惰性查询
print(res)
for i in res:
print(i.title)
2.filter() 查询指定范围 QuerySet
res=models.Book.objects.filter(pk=3)
print(res)
3.get() 查询单个对象,若有多个数据会报错,不建议使用
res=models.Book.objects.get(pk=2)
print(res.title)
4.first() 拿第一个
res=models.Book.objects.filter(pk=2).first()
print(res)
5.last() 拿最后一个
res=models.Book.objects.filter(pk=1).last()
print(res)
6.exclude() 除此之外 QuerySet
res = models.Book.objects.exclude(pk=3).filter(pk=4).filter(pk=4)
print(res)
7.values() 查出所有的title以列表套字典形式 QuerySet
res=models.Book.objects.values('title')
print(res)
for r in res:
print(r.get('title'))
8.values_list() QuerySet 同上列表套元组
res = models.Book.objects.values_list('title')
print(res)
9.count() 统计个数
res=models=Book.objects.all().count()
print(res)
10.distinct() 去重(必须是数据全一样才能去重,包括主键)
res=models.Book.objects.all().distinct()
res1=models.Book.objects.values('title').distinct()
print(res,res1)
11.order_by() 排序默认升序
res=models.Book.objects.order_by('price')
#res=models.Book.objects.order_by('-price')#倒序的一种方式
print(res)
12.reverse() 必须是已经排序好的才可以反转
res=models.Book.objects.order_by('price').reverse()
print(res)
13.exists() 是否为空,返回布尔值
res=modles.Book.objects.all().exists()
print(res)
双下划线查询来咯
查询价格大于200的书籍
res=models.Book.objects.filter(price__gt=200)
查询价格小于200的书籍
res = models.Book.objects.filter(price__lt=200)
查询价格大于或者等于200的书籍
res = models.Book.objects.filter(price__gte=200)
价格是200或者123.23或者666.66的
res = models.Book.objects.filter(price__in=[200,123.23,666.66])
价格在200到700之间的
res = models.Book.objects.filter(price__range=(200,700))
模糊匹配
like % _
查询书籍名称中包含p的
res =models.Book.objects.filter(title__contains='p')#区分大小写
res =models.Book.objects.filter(title__icontains='p')#不分大小写
查询以三开头的书籍
res = models.Book.objects.filter(title__startswith='三')
res1 = models.Book.objects.filter(title__endswith='P')
print(res1)
查询某年某月的书籍
res = models.Book.objects.filter(publish_date__year='2019')
res = models.Book.objects.filter(publish_date__month='10')
多表操作
一对多增删改查
增
#传publish_id时传id值
models.Book.objects.create(title='三国演义',price=123.23,publish_id=1)
#若传publish则传publish对象
publish_obj=models.Book.objects.filter(pk=1).first()
models.Book.objects.create(title='三国演义',price=123.23,publish=publish_obj)
查
book_obj = models.Book.objects.filter(pk=1).first()
print(book_obj.publish) # 获取到当前所对应的出版社对象
print(book_obj.publish_id) # 获取到的就是表中的实际字段
改
models.Book.objects.filter(pk=1).update(publish_id=3)
publish_obj = models.Publish.objects.filter(pk=2).first()
models.Book.objects.filter(pk=1).update(publish=publish_obj)
删
models.Publish.objects.filter(pk=2).delete()
默认也是级联更新 级联删除
多对多增删改查(操作的都是第三张表)
增add
book_obj=models.Book.objects.filter(pk=3).first()
print(book_obj.authors)
book_obj.authors.add(1,2)
author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
# book_obj.authors.add(author_obj)
book_obj.authors.add(author_obj,author_obj1)
"""
add() 括号内既可以传数字也可以传数据对象
并且都支持传多个
"""
改set
book_obj = models.Book.objects.filter(pk=3).first()
# book_obj.authors.set([3,])
# book_obj.authors.set([1,3])
author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
book_obj.authors.set((author_obj,))
book_obj.authors.set((author_obj,author_obj1))
"""
set() 括号内 既可以传数字也传对象
并且也是支持传多个的
但是需要注意 括号内必须是一个可迭代对象
"""
删remover
book_obj = models.Book.objects.filter(pk=3).first()
# book_obj.authors.remove(2)
# book_obj.authors.remove(1,2)
author_obj = models.Author.objects.filter(pk=1).first()
author_obj1 = models.Author.objects.filter(pk=2).first()
# book_obj.authors.remove(author_obj)
book_obj.authors.remove(author_obj,author_obj1)
"""
remove() 括号内 既可以传数字也传对象
并且也是支持传多个的
"""
清空clear
book_obj = models.Book.objects.filter(pk=3).first()
book_obj.authors.clear()
"""clear()括号内不需要传任何参数 直接清空当前书籍对象所有的记录"""
跨表查询
"""
ORM跨表查询
1.子查询
2.连表查询
正反向的概念
外键字段在谁那儿 由谁查谁就是正向
谁手里有外键字段 谁就是正向查
没有外键字段的就是反向
书籍对象 查 出版社 外键字段在书籍 正向查询
出版社 查 书籍 外键字段在书籍 反向查询
正向查询按字段
反向查询按表名小写 ...
"""
"""
# 1.基于对象的跨表查询 子查询
# 1.查询书籍是python入门的出版社名称
book_obj = models.Book.objects.filter(title='python入门').first()
# 正向查询按字段
print(book_obj.publish.name)
print(book_obj.publish.addr)
# 2.查询书籍主键是6的作者姓名
book_obj = models.Book.objects.filter(pk=6).first()
# print(book_obj.authors) # app01.Author.None
print(book_obj.authors.all())
# 3.查询作者是jason的手机号
author_obj = models.Author.objects.filter(name='jason').first()
print(author_obj.author_detail.phone)
print(author_obj.author_detail.addr)
"""
正向查询 按字段
当该字段所对应的数据有多个的时候 需要加.all()
否者点外键字段直接就能够拿到数据对象
"""
# 4.查询出版社是东方出版社出版过的书籍
publish_obj = models.Publish.objects.filter(name='东方出版社').first()
# print(publish_obj.book_set) # app01.Book.None
print(publish_obj.book_set.all())
# 5.查询作者是jason写过的所有的书
author_obj = models.Author.objects.filter(name='jason').first()
# print(author_obj.book_set) # app01.Book.None
print(author_obj.book_set.all())
# 6.查询手机号是110的作者
author_detail_obj = models.AuthorDetail.objects.filter(phone=110).first()
print(author_detail_obj.author)
print(author_detail_obj.author.name)
print(author_detail_obj.author.age)
"""
反向查询按表名小写
什么时候需要加_set
当查询的结果可以是多个的情况下 需要加_set.all()
什么时候不需要加_set
当查询的结果有且只有一个的情况下 不需要加任何东西 直接表名小写即可
"""
# 7.查询书籍是python入门的作者的手机号
book_obj = models.Book.objects.filter(title='python入门').first()
print(book_obj.authors.all())
django初步了解4的更多相关文章
- django初步了解2
目录 django初步了解2 表的字段增删改查 数据的增删改查 反向解析和分组 路由分发 名称空间 伪静态 虚拟环境 django初步了解2 表的字段增删改查 新增的字段 1.直接提供默认值 defa ...
- django初步了解
目录 学前了解 wsgiref模块( web服务网关接口) 根据不同的功能拆封成不同的py文件 动静态网页 HTTP协议 django初步了解1 1.小白必会三板斧 2.静态文件配置 3.reques ...
- Django初步(一):安装和简单演示
参考:Windows下安装Django:http://www.th7.cn/Program/Python/201305/136301.shtml
- django初步了解3
目录 JsonResponse模块 form表单上传文件 FBV与CBV django settings源码分析及实际应用 模板语法 模板传值 模板过滤器 标签 if标签 for标签 with标签 自 ...
- Django初步完成:登录、注册、退出
python环境:python2.7 开发工具:pycharm 项目名称:mysite5 app名称:online settings:映射app路径 INSTALLED_APPS = [ 'djang ...
- django初步--+urls解析
1.静态文件配置: 你在浏览器中输入网址能够有响应的资源返回给你 是因为后端已经提前给你开设该资源的接口,也就意味着你所能 访问到的资源 都是人家事先定义好的. 2.django如何给用户开设资源接口 ...
- django初步了解(一)
安装django pip3 install django==版本号 创建一个djangp项目 django-admin startproject 项目名 目录介绍: 运行django项目: pytho ...
- Django初步皮毛
Django是一个用python编写的Web框架. #Django安装 pip install Django 然后是配置环境变量,将这目录添加到系统环境变量中: C:\Python33\Lib\sit ...
- Django初识
web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...
随机推荐
- JavaScript设计模式—适配器模式
适配器模式介绍 旧接口格式和使用者不兼容,中间加一个适配器转换接口 在生活中,我们有许多的适配器,例如iPhone7以后的耳机接口从3.5mm圆孔接口更改成为了苹果专属的 lightning接口.许多 ...
- js 中null,undefined区别
首先摘自阮一峰先生的文章: 大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil. 有点奇 ...
- mybatis用Map<Long,List<String>>作为参数
mapper.xml文件里的<insert id="insertByMap" parameterType="java.util.Map"> inse ...
- Nginx之进程间的通信机制(信号、信号量、文件锁)
1. 信号 Nginx 在管理 master 进程和 worker 进程时大量使用了信号.Linux 定义的前 31 个信号是最常用的,Nginx 则通过重定义其中一些信号的处理方法来使用吸纳后,如接 ...
- zabbix自定义监控,自定义图表。
zabbix server:hostname=Zabbix server ip:192.168.100.7 zabbix agent: hostname=host3 ip:192.168.100.3 ...
- jenkins 基于角色的权限管理
如何给不同的用户分配不同的项目权限呢,今天来介绍这个 1 (全局安全设置)启用角色->2新建用户->3新建jenkins 全局角色 builder 并分配如下图3中所示权限(并分配Ove ...
- redis数据类型及订阅操作
Redis数据类型详解 Redis键/值介绍 Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如“foo”的简单字符串到一个JPG文件的内容都可以.空字符串也是有效k ...
- Nginx设置成服务并开机自动启动
在/etc/init.d下创建文件nginx [root@localhost ~]# vim /etc/init.d/nginx 其内容参考nginx官方文档 需要注意的配置: nginx=”/usr ...
- 3、inform (通知、告诉、报告) - perform (表现)
- 监控数据库DDL操作日志
背景 为了监控好生产环境下各个数据库服务器上DDL操作日志,便于运维工程师管控好风险,我们有必要关注当前实例下的所有的DDL操作以及对应的IP和hostname. 测试环境 Microsoft SQL ...