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

一、对多查询

 正向查询

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 ) #查询清华出版社的书籍名称
#方法1
qinghua_obj =models.Publish.objects.filter(name ='清华出版社').values('book__title')
print(qinghua_obj)
#方法2
qinghua_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=)
age=models.IntegerField() # 与AuthorDetail建立一对一的关系
authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
def __str__(self):
return self.name class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True)
birthday=models.DateField()
telephone=models.BigIntegerField()
addr=models.CharField( max_length=) def __str__(self):
return self.addr class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField( max_length=)
city=models.CharField( max_length=)
email=models.EmailField() def __str__(self):
return self.name class Book(models.Model): nid = models.AutoField(primary_key=True)
title = models.CharField( max_length=)
publishDate=models.DateField()
price=models.DecimalField(max_digits=,decimal_places=) # 与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 ")

  

day 81 天 ORM 操作复习总结的更多相关文章

  1. Django之ORM操作(重要)

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

  2. Django中的app及mysql数据库篇(ORM操作)

    Django常见命令 在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目.启动Django程序.创建新的APP.数据库迁移等. 创建Django项目 一把我们都 ...

  3. Django专题之ORM操作2

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

  4. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  5. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  6. Django中ORM操作

    ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...

  7. Django的ORM操作

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

  8. python 外键用法 多对多关系 ORM操作 模板相关

    一.app/models中写类(设计表结构) 1.普通类 class  A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...

  9. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...

随机推荐

  1. 启动apache时,出现httpd: Could not reliably determine the server\'s fully qualified domain name, using 127.0.0.1 for ServerName

    1.通过vi打开apache的配置文件httpd.conf > vi /data/apache/conf/httpd.conf 2.找到#ServerName www.example.com:8 ...

  2. 在windows系统下安装oracle 11g

     oracle 11g 安装在windows server 2012 系统下. 最近,需要配置数据库,要求在windows操作系统下,安装oracle 11g 数据库,因为以前没有安装过,所以成功后, ...

  3. NGS的duplicate的问题

    NGS的duplicate的问题   duplicate的三个问题: 一.什么是duplicate? 二.duplicate来源? 三.既然PCR将1个reads复制得到成百上千copies,那为什么 ...

  4. 为什么大神的UI设计那么高级?答案尽在此文…

    对于每个网页设计师而言,在设计过程中总会碰到需要作出设计决策的时候.也许你的公司并没有全职设计师,而需求上则要求设计出全新的UI:又或者你正在制作一个你自己的个人项目,而你希望它比 Bootstrap ...

  5. msys2 命令行添加镜像地址

    sed -i "1iServer = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686" /etc/pacman.d/mi ...

  6. 【Java】Eclipse在线安装SVN插件

    安装环境 系统:win7系统 软件:eclipse(Mars.2 Release (4.5.2)) 安装步骤 1. 打开eclipse软件,点击菜单栏的help——>Install New So ...

  7. 05 数据库入门学习-正则表达式、用户管理、pymysql模块

    一.正则表达式 正则表达式用于模糊查询,模糊查询已经讲过了 like 仅支持 % 和 _ 远没有正则表达式灵活当然绝大多数情况下 like足够使用 #语法 select *from table whe ...

  8. 2018.09.14 codechef Milestone(随机化算法)

    传送门 由于存在不超过7条直线可以覆盖超过所有的点. 所以如果我们随机选点的话(每次随机两个) 那么得到的解恰好为最优解的概率是149" role="presentation&qu ...

  9. 多网卡下对ServerSocket以TCP协议绑定IP和端口的测试

    一.引言:之前开发TCP协议的程序(C#里是Socket为主)都是基于主机上只有一个IP的,后来项目里涉及到了主机需要同时连接内外和外网的情况,在该主机上部署着一套WCS系统和一套WMS系统:WCS系 ...

  10. Spring3.x错误---- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

    Spring3.x错误: 解决方法: 缺少cglib的包, 下载地址: http://sourceforge.net/projects/cglib/files/latest/download?sour ...