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( ...
随机推荐
- C#事件(Event): 发布符合 .NET Framework Guidelines 的事件
本文翻译整理自:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-publish-event ...
- Faceted project metadata file "/.settings/org.eclipse.wst.common.project.facet.core.xml" could not be read
转载自 https://blog.csdn.net/qing_gee/article/details/79397052 Eclipse启动后项目报了下图这个错误,说是org.eclipse.wst.c ...
- YOLO V3训练自己的数据集
数据的输入几乎和Faster rcnn一样,标签格式xml是一样的. 相比Faster rcnn,数据多了一步处理,通过voc_annotation.py将图片路径和bbox+class存储在txt下 ...
- 你还不会Git?那就不要写代码了(二)
Git 命令练习 git的删除,添加,修改与日志 which vi 查看命令的目录 ⌃ a 光标去开头 ⌃ E 光标去结尾 ehco 'hellow world asd' > test.txt ...
- BFS - 求最短路径
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...
- Excel导入数据库百万级数据瞬间插入
Excel导入数据库百万级数据瞬间插入 百万级别,瞬间,有点吊哇
- 设置java启动项目
1,
- FreeRTOS低功耗模式
在系统或电源复位以后,微控制器处于运行状态.当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时,用户需要根据最低电源消耗,最快速启动时间和可用的唤醒源等条件,选定一个最佳 ...
- 洛谷P2585 [ZJOI2006]三色二叉树
题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依 ...
- influxdb+Grafana+jmeter监控搭建
安装InfluxDB InfluxDB的简介 InfluxDB 是用Go语言编写的一个开源分布式时序.事件和指标数据库,无需外部依赖. 类似的数据库有Elasticsearch.Graphite等.. ...