Django ORM各种查询
正向和反向查询
正向 ----> 关联字段在当前表中,从当前表向外查叫正向
反向 —> 关联字段不在当前表中,当当前表向外查叫反向
正向通过字段,反向通过表名查
表结构
from django.db import models class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField() #主表
class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
price = models.IntegerField()
#一对多字段
publish = models.ForeignKey('Publish', related_name='book', on_delete=models.CASCADE)
#多对多字段
authors = models.ManyToManyField('Author',related_name='author_book')
class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
一对多 ForeignKey
book – > publish :一个出版社有多个书
正向:
1、基于字段:obj.(外键).属性
因为book表中有publish字段。所以正向查询书的出版社
book_obj = mdoels.Book.objects.filter(nid=1).first()
book_obj.publish.name
反向:obj.(表名小写_set).all() 或者 obj.  book (related_name='book') .all()
1、set查询
因为publish没有book字段。要查询关于book的内容,就需要做反向查询 publish_obj=models.Publish.objects.filter(nid=1).first()
books = publish_obj.book_set.all() #如果Book表中没有related_name=‘book’用这方式
books = publish_obj.book.all() #Book表中有related_name=‘book’
for book in books:
print(book.title)
多对多 ManyToManyField
正向:
1、基于字段:obj.(外键).all()
book_obj = models.Book.objects.get(pk=1).first() 先拿到要查的对象 author = book_obj.authors.all() 查到这一本书关联的作者对象 for a in author:
print(a.name,a.age) 循环遍历作者对象,拿到作者的属性
反向:
obj.(表名小写_set).all() 或者 obj. author_book(related_name='author_book') .all()
1、set查询
#set查询
authorobj = models.Author.objects.filter(nid=1).first()
books = authorobj.book_set.all()
for book in books:
print(book.title) #related_name查询方式
authorobj= models.Author.objects.filter(nid=1).first()
books = authorobj.author_book.all()
for book in books:
print(book.title)
Django ORM各种查询的更多相关文章
- Django orm进阶查询(聚合、分组、F查询、Q查询)、常见字段、查询优化及事务操作
		
Django orm进阶查询(聚合.分组.F查询.Q查询).常见字段.查询优化及事务操作 聚合查询 记住用到关键字aggregate然后还有几个常用的聚合函数就好了 from django.db.mo ...
 - django orm 的查询条件
		
Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...
 - Django orm 常用查询筛选总结
		
本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不包含于 其他模糊查询 model: ...
 - django orm高级查询 F表达式和Q表达式以及分组annotate
		
1.关联关系映射及查询1.1django默认开启延迟加载所有多对1和1对1如果不使用select_related(),需要会延迟加载获取到相关对象,因为延迟可能会造成n+1次查询的问题,所以便有了se ...
 - Django ORM (三) 查询,删除,更新操作
		
ORM 查询操作 修改 views.py 文件 from django.shortcuts import render, HttpResponse from app01 import models f ...
 - Python - Django - ORM 分组查询补充
		
单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...
 - Python - Django - ORM F查询和Q查询
		
models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...
 - Python - Django - ORM 聚合查询和分组查询
		
models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...
 - Django ORM 反向查询
		
一/一对多反向查询 先定义两个模型,一个是A,一个是B,是一对多的类型. class A(models.Model): name= models.CharField('名称', max_lengt ...
 - django ORM常用查询条件
		
假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...
 
随机推荐
- Redis内存碎片清理
			
当Redis中清理了大量的Key之后原先Redis申请的内存(used_memory_rss)将继续持有而不会释放,此时查看内存信息将会看到存在大量的内存碎片.那么,Redis的内存碎片可以清理么,该 ...
 - 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架
			
一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...
 - Mybatis Plugin 以及Druid Filer 改写SQL
			
背景 工作中偶尔会碰到需要统一修改SQL的情况,例如有以下表结构: CREATE TABLE `test_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, ` ...
 - Java中的SPI扩展机制(有demo)
			
参考连接:https://www.jianshu.com/p/3a3edbcd8f24 一.什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制.它 ...
 - 构造分组背包(CF)
			
Ivan is a student at Berland State University (BSU). There are n days in Berland week, and each of t ...
 - 月薪30k的Java架构师JVM常见面试题解析
			
在做程序员的路上经常会遇到的JVM一些经典面试题,今天给大家分享出我自己的解题思路,希望对大家有帮助,后续有空会持续更新. 1.什么情况下会发生栈内存溢出. 思路: 描述栈定义,再描述为什么会溢出,再 ...
 - .NET编程周记第3期-2020年1月19日
			
整理了2020年1月19日这周阅读的几篇有趣的和.NET开发相关的文章.在这里和大家分享. 0x00 Introducing Nullable Reference Types in C# 如标题所示, ...
 - Flask路由+视图补充
			
一.路由设置的两种方法 1.装饰器 @app.route('/index/') def index(): return 'Hello World!' 2.源码 route->decorator- ...
 - java小心机(2)| 重载和构造器的小细节
			
每天进步一点点,距离大腿又近一步! 阅读本文大概需要10分钟 java小心机,为你诉说java鲜为人知的一面 涉及基本数据类型的重载 基本类型能从一个"较小"的类型自动提升到&qu ...
 - MNIST数据集
			
一.MNIST数据集分类简单版本 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data # ...