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层面,这些查询条件都 ...
随机推荐
- Spring第六篇---AOP
接着Spring第五篇讲 我们今天将叙述以下几个知识点 1 什么是AOP AOP 是一种思想 横向重复 纵向抽取 在软件业,AOP为Aspect Oriented Programming的缩写,意 ...
- c# 使用protobuf格式操作 Redis
protobuf格式介绍 1.protobuf为goole定义的类似于json的数据格式.2.最终都需要序列化为二进制形式进行传输存储.3.相对于xml,json格式来说,序列化为二进制后占用空间更小 ...
- 多线程学习-基础(六)分析wait()-notify()-notifyAll()
一.理解wait()-notify()-notifyAll()obj.wait()与obj.notify()必须要与synchronized(Obj)一起使用,也就是wait,notify是针对已经获 ...
- 输入框获取焦点后placeholder文字消失、修改placeholder的样式
输入框获取焦点后placeholder文字消失: <input placeholder='' onfocus="this.placeholder=''" onblur=&qu ...
- Python学习第三方库Requests: 让 HTTP 服务人类
转自官方文档:http://cn.python-requests.org/zh_CN/latest/ 快速上手 http://cn.python-requests.org/zh_CN/latest/u ...
- OpenStack部署的简单模型
记录下看到的openstack部署的简单模型,方便自己以后定位问题 规划网络部署节点为一个controller节点(包含网络节点),两个compute节点.controller节点有3个网卡,分别为e ...
- 最大k乘积
思路:看到这道题,第一思路就要是动态规划,不要想着用啥暴力或者排列组合,只会搞得很复杂. 动态规划的思路是对这个整数,我们从后向前进行划分k个数字,我们知道对于划分后的最后一个整数,它的位数要保证前面 ...
- D. 代码填空:LIS
LIS是最长上升子序列.什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段最长严格上升的部分,它不一定要连续. 就像这样:22, 33, 44, 77 和 22, 33, 44, 66 就是 ...
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- 【51Nod 1363】最小公倍数之和(欧拉函数)
题面 传送门 题解 拿到式子的第一步就是推倒 \[ \begin{align} \sum_{i=1}^nlcm(n,i) &=\sum_{i=1}^n\frac{in}{\gcd(i,n)}\ ...