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 ...
随机推荐
- LeetCode——First Bad Version
Description: You are a product manager and currently leading a team to develop a new product. Unfort ...
- ATDD和TDD的区别是什么?
最近看到一个新名词"ATDD",全称"Acceptance Test Driven Development ",中文称"验收测试驱动开发". ...
- 【BZOJ4196】[Noi2015]软件包管理器 树链剖分
[Noi2015]软件包管理器 树链剖分 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从 ...
- datatables如何让某个列中的值居中显示?
https://datatables.net/reference/option/columns.className 通过 columns.className 属性设置: 例如: js: columns ...
- Floyd算法并输出路径
hdu1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 热词统计以及Quartz.net的简单使用
一.热词统计 方案一: 设计一个表:ID KeyWord Count 当用户再输入框中查询的时候,我们就往表中插入数据,在插入之前首先判断是否已经存在keyword,存在的话,让C ...
- s3对象存储
bkstorages 模块帮助你在蓝鲸应用中使用多种文件存储服务作为后端,用于加速静态资源,管理用户上传文件. 自定静态文件 storage 如果通过修改配置文件满足不了你的需求,你随时可以通过继承 ...
- (2.4)DDL增强功能-数据汇总grouping、rollup、cube
参考:https://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.html 1.rollup (1)rollup在group by 子句中使用 ...
- mysql 数据操作 单表查询 使用正则表达式查询
SELECT * FROM employee WHERE name REGEXP '^ale'; SELECT * FROM employee WHERE name REGEXP 'on$'; SEL ...
- 三个小时学会wordpress模板制作
最近接了一个项目需要用wordpress建站,版面相对简单,ytkah就琢磨着自己来设计wordpress模板,首页栏目页文章页(很多网站无外乎就这些页面),其中栏目页和首页又很像,都是调用文章列表. ...