元祖的特点: 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个