博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之查询总结
阅读量:5281 次
发布时间:2019-06-14

本文共 2650 字,大约阅读时间需要 8 分钟。

models.Book.objects.filter(**kwargs): querySet [obj1,obj2]
models.Book.objects.filter(**kwargs).values(*args) : querySet [{},{},{}]
models.Book.objects.filter(**kwargs).values_list(title) : querySet [(),(),()]

跨表查询总结:

1、创建表

class Book(models.Model):  title = models.CharField(max_length=32)  publish=models.ForeignKey("Publish") # 创建一对多的外键字段  authorList=models.ManyToManyField("Author") # 多对多的关系,自动创建关系表class Publish(models.Model):  name = models.CharField(max_length=32)  addr = models.CharField(max_length=32)class Author(models.Model):  name=models.CharField(max_length=32)  age=models.IntegerField()  ad=models.models.OneToOneField("AuthorDetail") #创建一对一的关系class AuthorDetail(models.Model):  tel=models.IntegerField()

2、基于对象关联查询:

if 一对多查询(Book--Publish):
  正向查询,按字段:
  book_obj.publish : 与这本书关联的出版社对象 book_obj.publish.addr: 与这本书关联的出版社的地址
  反向查询,按表名_set
  publish_obj.book_set: 与这个出版社关联的书籍对象集合 publish_obj.book_set.all() :[obj1,obj2,....]
if 一对一查询(Author---AuthorDetail):
  正向查询,按字段:
  author_obj.ad : 与这个作者关联的作者详细信息对象
  反向查询:按表名:
  author_detail_obj.author : 与这个作者详细对象关联的作者对象
if 多对多(Book----Author):

  正向查询,按字段:

  book_obj.authorList.all(): 与这本书关联的所有这作者对象的集合 [obj1,obj2,....]

    book_obj.authorList.all().values("name"): 如果想查单个值的时候可以这样查

  反向查询,按表名_set:
  author_obj.book_set.all() : 与这个作者关联的所有书籍对象的集合

   book_obj.book_set.all().values("name"): 如果想查单个值的时候可以这样查

基于双下滑线的跨表查询:

if 一对多查询(Book--Publish):

  正向查询,按字段:

 # 查询linux这本书的出版社的名字:  models.Book.objects.all().filter(title="linux").values("publish__name")

  反向查询:按表名:

# 查询人民出版社出版过的所有书籍的名字  models.Publish.objects.filter(name="人民出版社出版").values("book__title")

if 一对一查询(Author---AuthorDetail):

  正向查询,按字段:

#查询egon的手机号  models.Author.objects.filter(name="egon").values("ad__tel")

  反向查询:按表名:

#查询手机号是151的作者  models.AuthorDetail.objects.filter(tel="151").values("author__name")

if 多对多(Book----Author):

  正向查询,按字段:

#查询python这本书的作者的名字  models.Book.objects.filter(title="python").values("authorList__name") [{},{},{},{}]

  正向查询,按表名:

#查询alex出版过的出的价格models.Author.objects.filter(name="alex").values("book__price")

注意:

publish=models.ForeignKey("Publish",related_name="bookList")

authorlist=models.ManyToManyField("Author",related_name="bookList")
ad=models.models.OneToOneField("AuthorDetail",related_name="authorInfo")
反向查询的时候都用:related_name的值
聚合查询:
querySet().aggregate(聚合函数)------返回的是一个字典,不再是一个querySet
Book.objects.all().aggregate(average_price=Avg('price'))
分组查询:
querySet().annotate() --- 返回的是querySet
#统计每一个出版社中最便宜的书籍的价格

sql:   select Min(price) from book group by publish_id;ORM:  models.Book.objects.values("publish__name").annotate(Min("price"))

 

转载于:https://www.cnblogs.com/lianxuebin/p/7838812.html

你可能感兴趣的文章
Java 中 静态方法与非静态方法的区别
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
线程池的概念
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>