Django-ORM查询api
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的更多相关文章
- django orm查询和后端缓存的使用
django orm 查询 1 字段后(db_column='age') (null=True)#表示数据库里面的该字段数据可以为空 (blank=True)#表示前端表单提交的时候可以为空 (db_ ...
- Django ORM 查询管理器
Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...
- Django 源码小剖: Django ORM 查询管理器
ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从 ...
- Django ORM 查询操作
queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象 ...
- Django(ORM查询2)
day70 ORM训练专题 :http://www.cnblogs.com/liwenzhou/articles/8337352.html 内容回顾 1. ORM 1. ORM ...
- django -- ORM查询
前戏 在我们之前操作ORM中,你也许是启动Django项目,通过地址访问固定的函数,或者在pycharm里的python console里执行,第一种比较麻烦,而且每次都要启动项目,写路由,第二种虽然 ...
- Python - Django - ORM 查询方法
models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key ...
- Django(ORM查询联系题)
day70 练习题:http://www.cnblogs.com/liwenzhou/articles/8337352.html import os import sys if __name__ == ...
- Django(ORM查询1)
day69 参考:http://www.cnblogs.com/liwenzhou/p/8660826.html 在Python脚本中调用Django环境 orm1.py import os if _ ...
- Django ORM 查询
过滤器 过滤器 作用 all() 查出所有行 filter() 可以添加过滤条件 order_by() 查出所有数据,如果有参数则按参数排序,参数是字符串 ,如:"-username&quo ...
随机推荐
- EUI组件之TextInput
输入文本,被废弃的组件,可以用EditableText代替
- [转帖]双剑合璧:CPU+GPU异构计算完全解析
引用自:http://tech.sina.com.cn/mobile/n/2011-06-20/18371792199.shtml 这篇文章写的深入浅出,把异构计算的思想和行业趋势描述的非常清楚,难得 ...
- go练习3 --map的操作
func T2_1() { // 键值string , 值 int 类型 m1 := map[string]int{} //添加一个元素 m1["str1&q ...
- 解决IE7下scroll的bug
IE7下scroll滚动问题 没法撑开 ie7下没办法撑开div; 即是设置了overflow-y:scroll; 解决版本:给设置scroll的容器加上position:relative
- 170628、springboot编程之Druid数据源和监控配置一
Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,那么如何修改数据源呢?我已目前使用比较多的阿里数据源Druid为例,如果使用其他的数 ...
- List<Map<String, Object>> 与 json 互转
近期做指纹识别,需要用到缓存文件,数据量并不大,用redis不合适,所以用到了txt文件. 思路是 1.定时查询指纹,存到txt缓存文件中. 2.新增或删除指纹时,查询指纹,存到txt缓存文 ...
- angular中对象与字符串之间的转换
1.angular 里 字符串与对象互转 angular.toJson();将字符串转成对象 angular.forJson(); 将字符串转成对象 2.angular 循环 <scr ...
- 玩转JavaScript module pattern精髓
JavaScript module pattern是一种常见的javascript编码模式.这种模式本身很好理解,但是有很多高级用法还没有得到大家的注意.本文,我们将回顾这种设计模式,并且介绍一些高级 ...
- ubuntu16.04下安装opencv-3.1.0及其扩展模块opencv_contrib
步骤1.安装依赖项 sudo apt--dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 可选的 sudo apt--dev l ...
- wireshark udp 序列号 User Datagram Protocol UDP
序列号等差2^8固定首部20字节首部20+4字节数据部分1378字节片偏移0位Quick UDP Internet