元祖的特点:
1.元组内的元素,不可以增加,删除,只能访问,这个是元祖的特性,比较安全。类似于字符串。但是我们可以对整个元祖进行删除。使用del内置函数
2.当元祖内只有一个元素的时候,需要加逗号消除歧义。
实现字典的排序
字典是无序的,想要变得有序,必须使用有序字典
import collections
# 通过OrderedDict类创建的字典是有序的
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'
print(dic) #OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
git命令
数据库操作的分组聚合
from django.db.model import Avg,Max,Min
Book.objects.all().aggregate(Avg('price')) 总平均价格
Book.objects.all().aggregate(avg_price = Avg('price')) 总平均价格,指定一个名称
Book.objects.aggregate(Avg('price'),Max('price'),Min('price')) 平均,最大,最小价格
统计每本书作者的个数
book_list = Book.objects.annotate(authorsNum = Count('authors'))
for book_obj in book_list:
print('book_obj.title,book_obj.authorsNum')
统计每一个出版社的最便宜的书
book_list = book.objects.values('publish__name').annotate(MinPrice=Min('price'))
for book_obj in book_list:
print(book_obj.price,book_obj.publish__name)
publish.objects.annotate(min_price = Min(book__price)')
for publish_obj in publish_list:
print('publish_obj.name,publish_obj.MinPrice')
统计每一本以py开头的书籍的作者个数:
model.book.filter(title__startswith="Py").values('authors__name').annotate(Count('authors'))
查询各个作者出书的总价格
model.book.objects.values('authors__name').annotate(sum_price = Sum('price')).value_list('')
model.author.objects.annotate(num_price = Sum('book__price')).value_list('name','book__price')
form组件
索引
SQL索引
1.索引的功能就是加速查找
2.mysql中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以为,还有约束功能
索引类型
普通索引:index
唯一索引:
主键索引frimary key
唯一索引unique 加速查找+约束
联合索引:
primary key(id,name) 联合主键索引
unique(id,name) 联合唯一索引
index(id,name) 联合普通索引
create table book(
id int,
title char(16),
price flotr,
index ix_title(title)
);
create index ix_price on book(title);
alter table book add index ix_auther(auther)
索引总结
http://www.cnblogs.com/linhaifeng/articles/7274563.html
#1. 一定是为搜索条件的字段创建索引,比如select * from s1 where id = 333;就需要为id加上索引
#2. 在表中已经有大量数据的情况下,建索引会很慢,且占用硬盘空间,建完后查询速度加快
比如create index idx on s1(id);会扫描表中所有的数据,然后以id为数据项,创建索引结构,存放于硬盘的表中。
建完以后,再查询就会很快了。
#3. 需要注意的是:innodb表的索引会存放于s1.ibd文件中,而myisam表的索引则会有单独的索引文件table1.MYI
MySAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在innodb中,表数据文件本身就是按照B+Tree(BTree即Balance True)组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此innodb表数据文件本身就是主索引。
因为inndob的数据文件要按照主键聚集,所以innodb要求表必须要有主键(Myisam可以没有),如果没有显式定义,则mysql系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则mysql会自动为innodb表生成一个隐含字段作为主键,这字段的长度为6个字节,类型为长整型.
注意事项
- 避免使用select *
- count(1)或count(列) 代替 count(*)
- 创建表时尽量时 char 代替 varchar
- 表的字段顺序固定长度的字段优先
- 组合索引代替多个单列索引(经常使用多个条件查询时)
- 尽量使用短索引
- 使用连接(JOIN)来代替子查询(Sub-Queries)
- 连表时注意条件类型需一致
- 索引散列值(重复少)不适合建索引,例:性别不适合
Django索引
select_related
使用
所有城市所属的省份
citys = models.city.objects.select_related('province').all()
for p in citys:
print(p.province)
每个人所居住的省份
person_list = models.Person.objects.select_related('living__province').all()
for person in person_list:
print(person.name,person.living.province.name)
总结
1.select_related主要针对一对一和多对一关系进行优化
2.select_related 使用SQLjoin语句进行优化,通过减少select语句的查询次数来进行优化提交
3.可以通过可变长参数指定需要select_related 的字段名
项目的主要流程
进程线程协程的区别
自定义模板语法
项目有多少人在做 共7个人
后台管理页面有三人
前端页面 2人
主站有2人
运维1个