Django orm查询操作
基于双下划线查询
切记!!!!正向查询按字段,反向查询按表名的小写
正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询
反向:在Book表里设置关联Obj表,Obj------>Book就是反向查询
废话不多说,直接上例子:
数据
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99
pub_date=models.DateTimeField() # "2012-12-12"
publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE) # 级联删除
authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
email=models.CharField(max_length=32)
def __str__(self):
return self.name class Author(models.Model):
nid = models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
age=models.IntegerField()
email=models.CharField(max_length=32)
ad=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
def __str__(self):
return self.name class AuthorDetail(models.Model):
addr=models.CharField(max_length=32)
tel=models.IntegerField()
def __str__(self):
return self.addr
以上是4张表,实际在操作中是5张表,有一张虚拟的表,Django自动给我们创建的
一下是各种查询的练习题
1 查询python这本书出版社的名字
2 查询人民日报出版社出版的所有的书籍的名称
3 查询python这本书籍的作者的年龄
4 查询李二短出版过的所有的书籍名称
5 查询任康娜的手机号
6 查询手机号为234的作者的名字
7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
8手机号以132开头的作者出版过的所有书籍名称以及出版社名称
答案:
1 查询python这本书出版社的名字
正向:ret = Book.objects.filter(title='python').values('publish__name')
反向:ret = Publish.objects.filter(book__title='python').values('name')
print(ret)
2 查询人民日报出版社出版的所有的书籍的名称
ret = Publish.objects.filter(name='人民日报出版社').values('book__title')
ret = Book.objects.filter(Publish__name='人民日报出版社').values('title')
print(ret) 3 查询python这本书籍的作者的年龄
ret = Book.objects.filter(title='python').values('authors__age')
ret = Authors.objects.filter(book__title='python').values('age')
print(ret)
(以下反向查询不一一列举,具体参考前3个)
4 查询李二短出版过的所有的书籍名称
ret = Author.objects.filter(name='李二短').values('book__title') print(ret)
5 查询任康娜的手机号
ret = Author.objects.filter(name='任康娜').values('ad__tel') print(ret) 6 查询手机号为234的作者的名字
ret = AuthorDetail.objects.filter(tel=234).values('author__name') print(ret) 7查询老男孩出版社出版过的所有书籍的名字以及作者的姓名
ret = Publish.objects.filter(name='老男孩出版社').values('book__title','book__authors__name') print(ret) 8手机号以132开头的作者出版过的所有书籍名称以及出版社名称
ret = AuthorDetail.objects.filter(tel__startswith=345).values('author__book__title','author__book__publish__name') print(ret)
Django orm查询操作的更多相关文章
- Django ORM 查询操作
queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象 ...
- Django框架 之 ORM查询操作详解
Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...
- Django ORM 查询管理器
Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...
- Django 2.0 学习(16):Django ORM 数据库操作(下)
Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...
- Django 2.0 学习(14):Django ORM 数据库操作(上)
Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...
- Django ORM models操作
title: Django ORM models操作 tags: Django --- Django ORM models操作 Django ORM基本操作 一.数据库的创建及增删改查 1 使用类创建 ...
- django orm查询和后端缓存的使用
django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...
- Django之ORM查询操作详解
浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Python脚本中调用Django环境 其他操 ...
- Django(17)orm查询操作
前言 查找是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时候传递不同的参数来实现查询需求.在ORM层面,这些查询条件都 ...
随机推荐
- 《Maven实战》笔记-10-灵活的构建
一.灵活构建的意义 一个优秀的构建系统必须足够灵活,它应该能够让项目在不同的环境下都能成功地构建.例如,典型的项目都会有开发环境.测试环境和产品环境,这些环境的数据库配置不尽相同,那么项目构建的时候就 ...
- Zinterstore 命令
先来看一下这个命令的定义: Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destin ...
- sql 语言练习题
1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录 . 4. 查询Score表中成绩 ...
- UC浏览器体验
1.用户界面: 有两个页面,一个展示网页应用-可添加自己喜欢的网页应用,另一个用来搜索,有推荐的常用的网址,有UC头条,页面下有设置,整体布局常规 2.短期刺激: 没有特别花哨的地方:个人感觉比较实用 ...
- Oracle PL/SQL编程语法
--plsql块结构,计算a,b的和 declare a ; b ; c int; begin c:=a+b; dbms_output.put_line(c); end; --%type数据类型,输出 ...
- windows 注册表
注册表(Registry,繁体中文版Windows称之为登录)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Windows 3.0推出OLE技术的时候 ...
- loj #2006. 「SCOI2015」小凸玩矩阵
#2006. 「SCOI2015」小凸玩矩阵 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M N \times MN×M(N≤M N \leq MN≤M)的矩阵 A AA,要求小凸从其中选出 ...
- 最短路【洛谷P3946】ことりのおやつ(小鸟的点心)
P3946 ことりのおやつ(小鸟的点心) 滑完雪之后,ことり突然想吃点心啦!于是她去了甜品店. 日本的冬天经常下雪.不幸的是,今天也是这样,每秒钟雪的厚度会增加q毫米. 秋叶原共有n个地点,编号从1到 ...
- socket 连接关闭的TIME_WAIT状态的理由
MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失 TIME_WAIT两点原因: 1.TCP分节可能 ...
- 6.House Robber(简单版抢银行)
Level: Easy 题目描述: You are a professional robber planning to rob houses along a street. Each house ...