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
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
随机推荐
- Postgres中的物化节点之sort节点
顾名思义,物化节点是一类可缓存元组的节点.在执行过程中,很多扩展的物理操作符需要首先获取所有的元组后才能进行操作(例如聚集函数操作.没有索引辅助的排序等),这时要用物化节点将元组缓存起来.下面列出了P ...
- 写给自己的web总结——css篇(1)
上一篇写了关于html的知识,算是小试牛刀,这次来尝试写一下css. 初步了解css css的全称为cascading style sheet-- 层叠样式表,通过编入代码来对html里的标签做出各种 ...
- C#备份一个文件到指定的文件夹里面
一开始我的想法是这样的: //在控制台里面操作 static void Main(string[] args) { //backup( @"D:\gg\config.xml", @ ...
- OC学习7——类别、扩展和协议
1.我么在调用NSLog()方法打印一个对象时,实际上是调用了该对象的description方法,这个description方法就和Java中的toString()方法一样.所以,下面两行代码其实是一 ...
- S7-200以太网通信
一.西门子网络系统 二.s7-200通过以太网模块接入以太网 三.S7-200可以接入的以太网系统 四.S7-200以太网通讯实验 五.实验硬件系统组成 六.S7-200作为服务器的配置 1.进入以太 ...
- Linux服务器上的oracle数据导入和导出
背景: 在同一台Linux服务器上,有两个数据库用户,分别为:database1,database2,如何把database1用户下面的所有的表和数据,导入到database2数据库(database ...
- bzoj 4345: [POI2016]Korale
Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的价值和.现在给所有可能的项链排序,先按权值从小到大排 ...
- 一道叉姐的AC自动机鬼题
题面描述丢失了... 给n个串模板串,然后再给你m个串,对于这m个串的每个串,问在[L,R]的模板串中,在多少个串中出现过; 这题的正解是对于后m个串建AC自动机,然后离线,在fail树上树链求并. ...
- jQueryUI Autocomplete插件使用入门教程(最新版)---------转载
前言: jQuery,无需多作介绍,相信各位读者都应该接触或使用过了.jQuery UI,简而言之,它是一个基于jQuery的前端UI框架.我们可以使用jQuery + jQuery UI非常简单方便 ...
- Zabbix自动发现监控Tomcat进程
1.编辑自动发现脚本 自动发现脚本只支持JSON格式 #!/usr/bin/env python # -*- coding:utf-8 -*- import commands import psuti ...