# ###############基于对象查询(子查询)##############

一、对多查询

 正向查询

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.def query(request):# ###############基于对象查询(子查询)############### 一对多查询 book-->publish#正向查询:# 查询python这本书的出版社的email邮箱.python_obj = models.Book.objects.filter(title ='python').first()print(python_obj.publish.email)return HttpResponse(' OK')

  

# ###############基于对象查询(子查询)##############                    # 正向查询按字段查询# 一对多查询 book----------------------->publish#                  <----------------------                    #反向查询 book_set.all()

反向查询

反向查询#查询五道口出版社的书籍名称 pub_obj =models.Publish.objects.filter(name ='五道口出版社').last()
 for obj  in pub_obj.book_set.all():     print(obj.title)

 return HttpResponse(' OK')



二、多对多 查询


            # 按字段查询 正向查询(author.all())# 多对多  book----------------------> author            # <----------------------            # book_set.all()

正向多对多查询
#查询python作者的年龄
python_obj =models.Book.objects.filter(title ='python').first()print(python_obj)for author in  python_obj.authors.all():print(author.name,author.age)return HttpResponse('ok')

输出结果

反向多对多 

  #查询 alex出版过的书籍alex =models.Author.objects.filter(name ='哪吒').first()for book  in alex.book_set.all():print(book.title)return HttpResponse('ok')

 三 、一对一的关系

author 于authordetail表的关系 。

一对一正向查询

反向查询

查询家在山东的作者名:

###############基于queryset和__查询(join的查询)####################

四 、

正向查询 : 按字段 

反向查询:按表名 

案例1 . 

#查询python这本书籍的出版社的邮箱

   python_obj = models.Book.objects.filter(title ='python').first()
    print(python_obj.publish.email)
    return HttpResponse(' OK')

  

案例2.   

 案例3 

两种方法

输出结果:

VIEWS文件 :

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here.def query(request):# ###############基于对象查询(子查询)############### 正向查询按字段查询# 一对多查询 book----------------------->publish#                  <----------------------#反向查询 book_set.all()# #正向查询:## # 查询python这本书的出版社的email邮箱.## python_obj = models.Book.objects.filter(title ='python').first()# print(python_obj.publish.email)#f反向查询 按表明小写_set.all()#查询五道口出版社的书籍名称# pub_obj =models.Publish.objects.filter(name ='五道口出版社').last()# for obj  in pub_obj.book_set.all():#     print(obj.title)# 按字段查询 正向查询(author.all())
# 多对多  book----------------------> author# <----------------------# book_set.all()#查询python作者的年龄# python_obj =models.Book.objects.filter(title ='python').first()# print(python_obj)# for author in  python_obj.authors.all():#     print(author.name,author.age)#查询 alex出版过的书籍# alex =models.Author.objects.filter(name ='哪吒').first()# for book  in alex.book_set.all():#     print(book.title)## 按字段查询 正向查询(authordetail.all())# 多对多  author----------------------> authordetail# <----------------------# 按表名 author#查询 哪吒的电话号码nezhao_obj = models.Author.objects.filter(name ='哪吒').first()print(nezhao_obj.authorDetail.telephone)# 反向查询# 查询家在山东的作者名字add_obj = models.AuthorDetail.objects.filter(addr ="山东").first()print(add_obj.author.name)#############################基于queryset和__查询(join的查询)##########################正向查询:按字段#反向查询 :表名小写#查询python这本书籍的出版社的邮箱ret =models.Book.objects.filter(title ='python').values('publish__email')print(ret )#查询清华出版社的书籍名称#方法1qinghua_obj =models.Publish.objects.filter(name ='清华出版社').values('book__title')print(qinghua_obj)#方法2qinghua_obj=  models.Book.objects.filter(publish__name='清华出版社').values('title')print(qinghua_obj)#   查询哪吒的手机号ret = models.Author.objects.filter(name ='哪吒').values('authorDetail__telephone')print(ret)return HttpResponse('ok')#查询手机号 以 186开头的作者的出版过的书籍名称以及对应的出版社

  

2018.10.29日整理

from django.db import models# Create your models here.class Author(models.Model):nid = models.AutoField(primary_key=True)name=models.CharField( max_length=32)age=models.IntegerField()# 与AuthorDetail建立一对一的关系authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)def __str__(self):return  self.nameclass AuthorDetail(models.Model):nid = models.AutoField(primary_key=True)birthday=models.DateField()telephone=models.BigIntegerField()addr=models.CharField( max_length=64)def __str__(self):return  self.addrclass Publish(models.Model):nid = models.AutoField(primary_key=True)name=models.CharField( max_length=32)city=models.CharField( max_length=32)email=models.EmailField()def __str__(self):return  self.nameclass Book(models.Model):nid = models.AutoField(primary_key=True)title = models.CharField( max_length=32)publishDate=models.DateField()price=models.DecimalField(max_digits=5,decimal_places=2)# 与Publish建立一对多的关系,外键字段建立在多的一方publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表authors=models.ManyToManyField(to='Author',)def __str__(self):return  self.title

orm查询

from django.shortcuts import render,HttpResponse# Create your views here.
from .models import *
def index(request):#查询沙河出版社所有书籍的名称和价格(一对多)ret = Publish.objects.filter(name="沙河出版社").values("book__title","book__price")  #正向查询按字段,反向查询按表名.print(ret)#打印结果:<QuerySet [{'book__title': 'python入门', 'book__price': Decimal('100.00')}]>"""select book.title,book.price from Publish inner join book on Publish.pk =Book.pulish_id where publish.name ="沙河出版社" """ret=Book.objects.filter(publish__name="沙河出版社").values("title","price")print(ret)#打印结果:<QuerySet [{'title': 'python入门', 'price': Decimal('100.00')}]>return  HttpResponse("ok ")

  

转载于:https://www.cnblogs.com/mengbin0546/p/9125358.html

day 81 天 ORM 操作复习总结相关推荐

  1. ORM操作models一对多、多对多关系

    ORM操作 单表.一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models ...

  2. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  3. Django - ORM操作

    Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...

  4. django mysql orm教程_带你了解Django ORM操作(基础篇)

    前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...

  5. 第十八 django及ORM操作

    一.项目及ORM操作 1.添加新项目 python manage.py startapp blog 2.配置数据库类 models.py from django.db import models# C ...

  6. Django 之ORM操作

    1.什么是ORM? 全称关系对象映射Object Relational Mapping(简称ORM),是通过描述面向对象与数据库之间的对应的元数据,将对象持久化的更新到数据库中. 有了ORM,就不需要 ...

  7. 【Django】ORM操作#2

    目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...

  8. django ORM 操作

    ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...

  9. Python+django网页设计入门(7):常用ORM操作

    前导课程: Python+django网页设计入门(6):文件上传与数据导入 Python+django网页设计入门(5):自定义用户注册与登录功能 Python+django网页设计入门(4):用户 ...

最新文章

  1. 皮一皮:论智能酒店的高等级提示...
  2. CAS无锁(乐观锁、自旋锁)优化
  3. DotNetNuke的升级路径
  4. yelee主题中的Busuanzi网站统计失效问题
  5. windows安装mongodb(快速简易版)
  6. Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】
  7. 软考解析:2017年上半年下午试卷
  8. android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...
  9. vc6.0添加注释快捷键
  10. Qt工作笔记-Qt文档阅读笔记-setMouseTracking(无需按下移动使得widget获取鼠标位置)
  11. leetcode 646 python
  12. php怎么调用dll例子,php调用dll的实例操作动画与代码分享_PHP教程
  13. Java笔记——泛型擦除
  14. 安卓手机免root修改hosts文件
  15. GoF设计模式——工厂模式(C++实现)
  16. 宁夏诗词学会红寺堡采风专辑
  17. 【百页AI报告】2017人工智能现状、创业图景与未来(98PPT)
  18. Flutter Animation动画
  19. 论文写作 之 Related work
  20. 直接耦合的互补输出级

热门文章

  1. [Win32]IP数据报的首部如何定义
  2. php下扩展php_curl.dll的安装
  3. Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版
  4. python变量词是什么意思_python1变量,表达式和语句
  5. 地区的json数据_Python 连接开放航空交通数据,轻松构建航班跟踪应用!
  6. web接口响应时间标准_从零搭建Web应用(二)
  7. im即时通讯源码_IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)
  8. cytoscape使用方法_信号通路分析工具教程——Cytoscape及OmniPath插件
  9. 项目上线简化流程介绍
  10. 如何在 Kubernetes 中对无状态应用进行分批发布