models.py示例
class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=)
# 书籍与出版社: 一对多
publisher=models.ForeignKey(to="Publish",related_name="bookList")
# 书籍与作者: 多对多
authors=models.ManyToManyField("Author") class Publish(models.Model):
name=models.CharField(max_length=) class Author(models.Model):
name=models.CharField(max_length=) class AuthorDetail(models.Model):
addr=models.CharField(max_length=)
author=models.OneToOneField("Author")
单表查收
models.Book.obejcts.all()       #   QuerySet    []
models.Book.obejcts.filter(nid__gt=,nid__lt=) # QuerySet []
models.Book.obejcts.get() # model对象
models.Book.obejcts.values() # QuerySet [{},{}]
models.Book.obejcts.values_list()
models.Book.obejcts.exclude()
models.Book.obejcts.all().first()
models.Book.obejcts.all().last()
models.Book.obejcts.all().orderby()
models.Book.obejcts.all().reverse()
models.Book.obejcts.values("price").distinct() #去重不要带索引,索引本身是唯一的
models.Book.obejcts.all().count()
models.Book.obejcts.all().exist() ---- 双下划线:
models.Book.obejcts.filter(nid__gt=)
models.Book.obejcts.filter(price__in=[,,]) 支持链式操作:
models.Book.obejcts.all().filter().orderby("id").count()
models.Book.obejcts.all().get().orderby("id").count()
跨表查询

基于对象 类似于SQL语句的子查询

(1) 查询Linux这本书的出版社名称和作者名字   属于正向查询  按关联字段

book_obj=models.Book.obejcts.get(title="linux")
book_obj.publisher.name authors_list=book_obj.authors.all()
for author in authors_list:
print(author.name)

(2) 人民出版社出版过的所有书籍名称   属于反向查询  if 设置related_name,那么related_name的值,没有设置,按表明_set

 publish_obj=models.Publish.obejcts.filter(name="人民出版社").first()
book_list=publish_obj.bookList.all()
for book in book_list:
print(book.title)

(3) alex 出版社过得所有书籍的名称    属于反向查询 if 设置related_name,那么related_name的值,没有设置,按表明_set

 alex=models.Author.obejcts.get(name="alex")
book_list=alex.book_set.all()
for book in book_list:
print(book.title)

(4) 作者alex的所在地址  正向查询 按字段  反向查询 按表名

   alex=models.Author.obejcts.get(name="alex")
alex.authordetail.addr
基于QuerySet

双下划线:类似于inner join   正向查询:按字段     反向查询:按表名    key:  1 过滤条件  2 查询结果

(1) 查询Linux这本书的出版社名称和作者名字   属于正向查询  按关联字段

models.Book.obejcts.filter(title="linux").values("publisher__name") # [{"publisher__name":"人民出版社"}]
models.Book.obejcts.filter(title="linux").values("authors__name") #

(2) 人民出版社出版过的所有书籍名称

 models.Book.obejcts.filter(publisher__name="人民出版社").values("title")
models.Publish.obejcts.filter(name="人民出版社").values("book__title")

(3) alex 出版社过得所有书籍的名称

models.Book.obejcts.filter(authors__name="alex").values("title")          
models.Author.obejcts.filter(name="alex").values("book__title")

Django-ORM查询api的更多相关文章

  1. django orm查询和后端缓存的使用

    django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...

  2. Django ORM 查询管理器

    Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...

  3. Django 源码小剖: Django ORM 查询管理器

    ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从 ...

  4. Django ORM 查询操作

    queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象 ...

  5. Django(ORM查询2)

    day70 ORM训练专题 :http://www.cnblogs.com/liwenzhou/articles/8337352.html 内容回顾     1. ORM         1. ORM ...

  6. django -- ORM查询

    前戏 在我们之前操作ORM中,你也许是启动Django项目,通过地址访问固定的函数,或者在pycharm里的python console里执行,第一种比较麻烦,而且每次都要启动项目,写路由,第二种虽然 ...

  7. Python - Django - ORM 查询方法

    models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key ...

  8. Django(ORM查询联系题)

    day70 练习题:http://www.cnblogs.com/liwenzhou/articles/8337352.html import os import sys if __name__ == ...

  9. Django(ORM查询1)

    day69 参考:http://www.cnblogs.com/liwenzhou/p/8660826.html 在Python脚本中调用Django环境 orm1.py import os if _ ...

  10. Django ORM 查询

    过滤器 过滤器 作用 all() 查出所有行 filter() 可以添加过滤条件 order_by() 查出所有数据,如果有参数则按参数排序,参数是字符串 ,如:"-username&quo ...

随机推荐

  1. LeetCode——First Bad Version

    Description: You are a product manager and currently leading a team to develop a new product. Unfort ...

  2. ATDD和TDD的区别是什么?

    最近看到一个新名词"ATDD",全称"Acceptance Test Driven Development ",中文称"验收测试驱动开发". ...

  3. 【BZOJ4196】[Noi2015]软件包管理器 树链剖分

    [Noi2015]软件包管理器 树链剖分 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从 ...

  4. datatables如何让某个列中的值居中显示?

    https://datatables.net/reference/option/columns.className 通过 columns.className 属性设置: 例如: js: columns ...

  5. Floyd算法并输出路径

    hdu1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  6. 热词统计以及Quartz.net的简单使用

    一.热词统计 方案一: 设计一个表:ID       KeyWord     Count 当用户再输入框中查询的时候,我们就往表中插入数据,在插入之前首先判断是否已经存在keyword,存在的话,让C ...

  7. s3对象存储

    bkstorages 模块帮助你在蓝鲸应用中使用多种文件存储服务作为后端,用于加速静态资源,管理用户上传文件. 自定静态文件 storage 如果通过修改配置文件满足不了你的需求,你随时可以通过继承 ...

  8. (2.4)DDL增强功能-数据汇总grouping、rollup、cube

    参考:https://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.html 1.rollup (1)rollup在group by 子句中使用 ...

  9. mysql 数据操作 单表查询 使用正则表达式查询

    SELECT * FROM employee WHERE name REGEXP '^ale'; SELECT * FROM employee WHERE name REGEXP 'on$'; SEL ...

  10. 三个小时学会wordpress模板制作

    最近接了一个项目需要用wordpress建站,版面相对简单,ytkah就琢磨着自己来设计wordpress模板,首页栏目页文章页(很多网站无外乎就这些页面),其中栏目页和首页又很像,都是调用文章列表. ...