day 56
聚合查询
aggregate()
是QuerySet()
的一个终止子句,返回一个包含一些键值对的字典
导入聚合函数 :from django.db.models import Avg,Sum,Max,Min,Count
级联更新 级联删除 外键字段带来的约束
res = models.Book.objects.aggregate(mr = Max('price'))
print(res)
分析:操作外键字段数据的时候,书跟出版社是一对多的关系,外键在书的表中(外键字段最多的表中),如果你把出版社删除了,所对应的书也会自动删除 对应的
这时候如果你把出版社主键值改变了 书籍表中对应的出版社主键值也跟着改变
注意:聚合函数必须用在分组之后,没有分组其实默认整体就是一组
分组查询
group by
关键字 annotate
和聚合函数一起使用
例题:统计每一本书的作者个数 书名 和对应的作者人数
res = models.Book.object.annotate(author_num=Count('aothors__id')).values('title','author_num')
annotate
本身表示的是group by
的作用,前面找寻分组依据,内部放置显示可能用到的聚合运算式,后面跟filter来增加限制条件,最后的value来表示分组后想查找的字段值
F与Q查询
导入模块 from django.db.models import F,Q
F
能够获取表字段所对应的值,有两种关系,and
和or
例题:查询库存数大于卖出数的书籍
res = models.Book.object.filter(ku_cun__gt = F('mai_chun')).values('title')
后面可以跟其他字段的值
from django.db.models.functions import Concat
操作字符串需要借助于Concat方法
例题:将所有书的名称后面全部加上"新款"后缀
from django.db.models.function import Concat
from django.db.models import Value
ret3 = models.Book.objects.update(title=Concat(F('title'),Value('新款')))
Q
查询
默认是and
关系
例题:查询书籍名称是三国演义 或者 库存数是500的书籍
and关系:
res = models.Book.object.filter(title='三国演义',ku_cun = 500)
Q包裹之后and关系:
res = models.Book.object.filter(Q(title='三国演义'),Q(ku_cun = 500))
|表示或(or)的关系
res = models.Book.object.filter(Q(title='三国演义')|Q(ku_cun = 500))
~表示的是not关系
res = models.Book.object.filter(~Q(title='三国演义')|Q(ku_cun = 500))
Q的高级用法
q = Q()
q = connector = 'or' 默认是and 可以改成or
q.children.append(('title','书的名字'))
q.children.append(('ku_cun__gt',500))
res = models.Book.objects.filter(~q) 相反
print(res)
ORM字段及参数
CharFied varchar
IntegerField int
BigIntegerField bigint
EmailField varchar(254)
DateField
DateTimeField
auto_now :实时更新时间
auto_now_add:在创建数据的时候 会当前时间自动记录 不会修改 除非认为修改
AutoField auto_increment
BooleanField 布尔值
该字段在存的时候 是True 或 False
它会自动存成 1 或 0
TextField 存大文件路径
upload_to = 'a.txt'
该字段传值的时候 直接传文件对象
会自动将文件对象保存到upload_to 后面指定的文件路径中
然后将路径保存到数据库中
DecimalField
10进制小数
参数:max_digits,小数总长度
decimal_places,小数位数长度
ImageField 上传图片
upload_to = "" 上传图片的路径
storage = None 存储组件,默认django.core.files.storage.FielSystemStorage
width_field = None 上传图片的高度保存的数据库字段名(字符串)
height_field = None 上传图片宽度保存的数据库字段名(字符串)
UUIDField 字符串类型 ,Django Admin以及ModelForm中提供对UUID格式的验证
protocol 用于指定IPV4或IPV6,'both',"ipv4","ipv6"
unpack_ipv4 如果指定为True 则输入:fff:192.0.2.1的时候,可解析为192.0.2.1,开启此功能需要Protool= 'both'
IPAddressField 字符串类型 提供IPV4的验证机制
对应关系
对应关系:
'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)',
ORM字段与MySQL字段对应关系
13个字段操作总结
返回QuerySet对象的方法
all()
filter()
exclude()
order_by()
reverse()
distinct()
特殊的Queryset
values() 返回一个可迭代的列表套字典序列
values_list() 返回一个可迭代的列表套元组序列
返回具体的对象
get()
first()
last()
返回布尔值的方法
exists()
返回数字的方法
count()
自定义char字段
class MyCharField(models.Field):
def __int__(self,max_length,*args,**kwargs):
self.max_length = max_length
重新调用父类的方法
super().__init__(max_length=max_length,*args,**kwargs)
def db_type(self,connection):
return 'char(%s)%self.max_length'
ORM中事物的操作
什么是事务
指的是一组操作,要么全部执行成功,要么全部执行失败
django中如何开启事务
from django.db import transaction
try:
with transaction.atomic():
数据库操作
缩进里面所有的代码 都是一个事务
创建一条订单数据
models.Order.objects.create(num="10101010",product_id = 1,count=1)
能执行成功
models.Product.objects.filter(id=1).update("kucun")-1,
maichu=F("maichu")+1)
except Exception as e:
print(e)
四大特性:
原子性:不能再次分的事务,要么全部执行,要么全部取消
一致性:指事务发生前和发生后,数据的总额依然不变 转账实例
隔离性:事务与事务操作之间是独立不可见的
持久性:当事务完成后,其影响应该留下来,不能撤销,只能通过“补偿性事务”来抵消之前的错误
存储引擎
InnoDB:支持事务,MyISAM不支持
MyIsam:支持行锁,MySAM支持的表锁
MEMORY:将表中的数据存储到内存中,为了查询和引用其他表数据提供快速的查询
三大数据存储引擎的特性:
InnoDB: 支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM: 插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。
MEMORY: 所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
数据库三大范式
第一范式:无重复的域
第二范式:在第一范式的基础上属性完全依赖于主键
第三范式:属性不依赖于其他非主属性,也就是在满足2的基础上,任何非主属性不得传递依赖于主属性
day 56的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第4章:字符串___建议56~59)
建议56:自由选择字符串拼接方法 对一个字符串拼接有三种方法:加号.concat方法及StringBuilder(或StringBuffer ,由于StringBuffer的方法与StringBuil ...
- ASProtect注册码使用教程|ASProtect SKE(加壳脱壳工具) 2.56 汉化注册版
ASProtect 是功能非常完善的加壳.加密保护工具.能够在对软件加壳的同时进行各种保护.如:反调试跟踪.自校验及用密钥加密保护等:还有多种限制使用措施,如:使用天数限制.次数限制及对应的注册提醒信 ...
- 56相册视频(土豆相册视频 激动相册视频 QQ动感影集等)——下载教程
由于目前流行的相册视频或影集大多是由Flash.音乐和图片组合而成的动画,不属于完整视频,所以不能用常规的解析方法下载. 鉴于很多朋友希望可以下载自己精心制作的相册,故在本教程中,我们将以图文并茂的方 ...
- php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视
原文地址:http://www.lianyue.org/2013/2497/ <?php /** * 解析 视频信息 类 * * 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视 ** ...
- boost 1.56.0 编译及使用
boost的编译和使用,经过搜集资料和总结,记录成文.感谢文后所列参考资料的作者. 1 下载 地址:http://sourceforge.net/projects/boost/files/boost/ ...
- 重新想象 Windows 8 Store Apps (56) - 系统 UI: Scale, Snap, Orientation, High Contrast 等
[源码下载] 重新想象 Windows 8 Store Apps (56) - 系统 UI: Scale, Snap, Orientation, High Contrast 等 作者:webabcd ...
- 1-2+3-4+5-6+7......+n的几种实现
本文的内容本身来自一个名校计算机生的一次面试经历,呵呵,没错,你猜对了,肯定 不是我 个人很喜欢这两道题,可能题目原本不止两道,当然,我这里这分析我很喜欢的两道. 1.写一个函数计算当参数为n(n很大 ...
- nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 56; cvc-complex-type.2.4.c通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...
- cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题
在安装cocoapods遇到的问题 [!] /usr/bin/git clone https://github.com/CocoaPods/Specs.git master Cloning into ...
- 制作PHP安装程序的原理和步骤56
制作PHP安装程序的原理和步骤56 1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实P ...
随机推荐
- duilib教程之duilib入门简明教程5.自绘标题栏
如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理.如果用duilib,就是小case啦. duilib其实并没有区分标题栏和 ...
- phpCOW机制详解
写时复制(Copy-on-Write,也缩写为COW),顾名思义,就是在写入时才真正复制一份内存进行修改. COW最早应用在*nix系统中对线程与内存使用的优化,后面广泛的被使用在各种编程语言中,如C ...
- Linux 日期时间命令
cal : 显示日历 -1 显示一个月的月历 -3 显示系统前一个月,当前月,下一个月的月历 -s 显示星期天为一个星期的第一天,默认的格式 -m 显示星期一为一个星期的第一天 -j 显示在当年中 ...
- java — 抽象类和接口
老生常谈的一个概念,很明确,不过我们多从几个角度来看下应该会有更好的理解,最近翻了下java8的某些新特性 关于接口的新特性让笔者受惊了,下面结合下做个总结,有更新的话直接在这里更新. 设计层面讲: ...
- Vue中的better-scroll插件
Vue中的better-scroll插件 在需要的文件中添加 import BScorll from 'better-scroll'; 引用的示例代码: let scroll = new BScrol ...
- oracle中utl_file包读写文件操作实例学习
在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create ...
- elasticsearch 过滤器的种类
elasticsearch之查询过滤 elasticsearch elastic-search xixicat 2月13日发布 推荐 1 推荐 收藏 2 收藏,289 浏览 序 本文主要记录es的查询 ...
- pandas一些基本操作(DataFram和Series)_3
import pandas as pd;import numpy as np#通过一维数组创建Chinese = np.array([89,87,86])print(Chinese)print(pd. ...
- Python编程基础环境安装
安装python2.7 wget https://www.Python.org/ftp/Python/2.7.8/Python-2.7.8.tgz tar xvf Python-2.7.8.tgzcd ...
- iOS 更新日志 - 持续更新中
本文只是为了简单记录一下每个正式版本发布时间和更新内容,只有这个初衷,从2019年9月25日开始,将会持续更新. iOS 13.1 - 2019年9月25日 iOS 13.1 iOS 13.1 包括错 ...