Django查询笔记1
models.Book.objects.filter(**kwargs): querySet [obj1,obj2]
models.Book.objects.filter(**kwargs).values(**kwargs) : querySet [{},{},{}]
models.Book.objects.filter(**kwargs).values_list(title) : querySet [(),(),()] 跨表查询总结:
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() 基于对象关联查询:
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,....] 反向查询,按表名_set:
author_obj.book_set.all() : 与这个作者关联的所有书籍对象的集合 基于双下滑线的跨表查询: 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): 正向查询,按字段:
models.Author.objects.filter(name="egon).values("ad__tel") 反向查询:按表名:
models.AuthorDetail.objects.filter(tel="151").values("author__name") if 多对多(Book----Author): 正向查询,按字段:
models.Book.objects.filter(title="python").values("authorList__name") [{},{},{},{}] 正向查询,按表名:
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")) F查询 与 Q查询
F()查询
Django提供的F()来做两个字段的比较;
Django支持F()对象之间以及 F()对象和常熟之间的加减乘除和取模操作;
修改操作也可以使用F函数,比如将每一本书的价格提高7元; Q()查询
filter()等方法中的关键字参数查询都是期进行“AND”的,。如果你需要执行更加复杂的查询(例如or语句),你可以使用Q对象。
Q对象可以使用& 和| 操作符组合起来,当一个操作符在两个Q之间使用的时候,他会产生一个新的Q对象 http无法保存状态:此时cookie就诞生了
cookie:客户端浏览器保存的一组组的键值对:-------{"":"","":"","":""}
但是cookie的所有信息都在浏览器是上边了,这样很不安全,
此时cookie+session就诞生了:
session:服务器上保存的用户信息
浏览器(一段代码展示,其实金和cookie差不多):
url: http://127.0.0.1:8000/login/ get
url: http://127.0.0.1:8000/login/ post user pwd
url: http://127.0.0.1:8000/home/
{"sessionID":"dfhasdjfhkjlcn4352kjdsfhkjsd"}
if post:
requset.session["IS_LOGON"]=True
requset.session["USER"]=username
return redirect("/home/")
Django:
1 s="sdgsdfg4565dfgsdfgsdf"
2 在django-session表中,添加一条记录
insert into django-session values (s,"{"IS_LOGON":True,"USER":egon}",12321)
3 obj.set_cookie("sessionID",s) {"sessionID":"sdgsdfg4565dfgsdfgsdf"} sdgsdfg4565dfgsdfgsdf:{d}
重定向:
/home/ ----> {"sessionID":"fasdlkfjsakdl324ada2adhdjlka99"}
request.session.get("IS_LOGON",None)
在django-session表中,进行查询:
s=requset.COOKIE.get("sessionID")
select session-data from django-session where session-key=s
Django查询笔记1的更多相关文章
- Django 学习笔记之四 QuerySet常用方法
QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- Django学习笔记(三)—— 型号 model
疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...
- Django 学习笔记(七)数据库基本操作(增查改删)
一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...
- Django学习笔记(9)—— 开发用户注册与登录系统
一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...
- Django学习笔记(4)——Django连接数据库
前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
- Django学习笔记(一):环境安装与简单实例
Django学习笔记(一):环境安装与简单实例 通过本文章实现: Django在Windows中的环境安装 Django项目的建立并编写简单的网页,显示欢迎语与当前时间 一.环境安装 结合版本兼容性等 ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
随机推荐
- .NET 绝对路径的配置
有时候因为用IIS配置网站,会导致一些全局引用有路径问题无法引用到.今天就说一下,关于全局引用的绝对路径的配置,譬如,由于IIS配置的虚拟路径,一些CSS,JS的引用找不到,又或者自定义的一些跳转出现 ...
- 小白的Python之路 day4 装饰器前奏
装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能 ...
- 分组查询限制。HAVING可写在GROUP BY前。
限制一.无GROUP BY时统计函数不能和字段同时出现: 限制二.有GROUP BY时字段部分只能出现分组的字段: 限制三.统计函数嵌套时不能有字段.
- ES6异步操作Thunk、co和async
使用Thunk函数对Generator函数进行流程管理,首先什么是Thunk函数?我们应该先说下参数的求值策略,编译器的求值策略一个是"传值调用"另一个是"传名调用&qu ...
- iOS UICollectionView(转一) XIB+纯代码创建:cell,头脚视图 cell间距
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈.这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身 ...
- mouseout、mouseover和mouseleave、mouseenter区别
今天在使用鼠标事件时,用错了mouseout,于是做个测试总结. 结论: mouseenter:当鼠标移入某元素时触发. mouseleave:当鼠标移出某元素时触发. mouseover:当鼠标移入 ...
- HTML列表的常用属性及其应用
首先列表分成有序和无序分别是<ol><ul>,无序的比较简单,看个例子: <html> <body> <h4>一个无序列表:</h4& ...
- 基于阿里云的MQTT远程控制
好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...
- Docker(十二):Docker集群管理之Compose
1.Compose安装 curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname ...
- linux下后台运行MATLAB
原帖:http://sypeterli1.blog.163.com/blog/static/2283740492013101745824207/ 后台运行matlab脚本文件的方法:nohup ...