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层面,这些查询条件都 ...
随机推荐
- JVM-jvm学习大纲(0)
1.详细jvm内存模型 2.讲讲什么情况下回出现内存溢出,内存泄漏? 3.说说Java线程栈 4.JVM 年轻代到年老代的晋升过程的判断条件是什么呢? 5.JVM 出现 fullGC 很频繁,怎么去线 ...
- jQuery 基础 : 获取对象 根据属性、内容匹配, 还有表单元素匹配
指定元素中包含 id 属性的, 如: $("span[id]") <span id="span1" name="S1">AA ...
- i++,++i,i+=1,i = i+1在C++中的区别
其实这个问题可以从三个角度去分析:语言规范,编译器实现,CPU支持.首先从语言规范上来讲:前置++和后置++是不等价的,前置++在规范中明确指出 和+=组合操作符是等价的,但和E = E+1;这样的赋 ...
- Web Server Jexus配置及使用
Web Server Jexus配置及使用 一.jexus概念: Jexus 即 Jexus Web Server,简称JWS,是Linux平台上的一款ASP.NET WEB服务器,是 Linux. ...
- github blog
git version 2.18.0.windows.1 node-v10.8.0-win-x64.zip 1 安装node.js,直接下载,配置环境变量即可(win10重启生效) 2 git安装,略 ...
- Miners
Miners 有三种食品,两组矿工.矿工们根据最近三次过来的食品车产煤,产出煤的个数就是新过来的食品车,和前面两辆车中,不同的食品车的个数. 现在你有一个长度为n的食品车序列,请合理分配它们给两组矿工 ...
- jpa batch批量操作save和persist比较
1.网上最常见的JPA----entityManager批量操作方法 private EntityManager em; @PersistenceContext(name = "Entity ...
- loj#115. 无源汇有上下界可行流
\(\color{#0066ff}{ 题目描述 }\) 这是一道模板题. \(n\) 个点,\(m\) 条边,每条边 \(e\) 有一个流量下界 \(\text{lower}(e)\) 和流量上界 \ ...
- Educational Codeforces Round 59 (Rated for Div. 2)
熬夜爆肝,智商急剧下降 坐标UTC+8晚上23:35开始 晚上脑袋转的慢,非常慢 T1上来先做还花了好几分钟 T2本来是有式子的我TM写数位DP写炸了然后才发现是有公式 T3英语不好,一开始题意没读懂 ...
- log4j配置文件及java调用 每个级别输出到不同的文件
#配置根Logger log4j.rootLogger = DEBUG , RollingFile,CONSOLE #文件大小达到一定尺寸的时候创建一个新的文件 log4j.appender.Roll ...