django-day12.md

# 昨日回顾

```python
1 聚合查询
	-5个聚合函数
    -from django.db.models import Avg,Max,Min,Count,Sum
    -book=models.Book.objects.all().aggregate(Avg('price'))
2 分组查询
	-分组就是把相同的归为一组,相同的指的就是group by 的字段
	   book:
       id  name   price      publish
        1   金品   11.2        北京出版社
        2   西游   14.2        南京出版社
        3   东游   16.2        南京出版社
        4   北邮   19.2        东京出版社
    -按出版社分组
    	id     name         price            publish
        1      金品         11.2             北京出版社
        2,3    西游,东游     14.2,16.2       南京出版
        4      北邮         19.2             东京出版社
    -取数据
    	-取数据时,只能取出分组字段(group by字段),还能取聚合字段(5个)
   	-原生sql
    	select avg(price),publish form book group by publish;
    -对应orm
    Book.objects.values('publish').annotate(avg=Avg(price)).values('publish','avg')
        
    -多表
    	book:
       id  name   price      publish
        1   金品   11.2        1
        2   西游   14.2        2
        3   东游   16.2        2
        4   北邮   19.2        3
        publish:
        id    name         addr
        1     北京出版社     北京
        2     南京出版社     南京
        3     东京出版社     东京
    -连表
    id  name   price      publish  id    name         addr
        1   金品   11.2        1    1     北京出版社     北京
        2   西游   14.2        2    2     南京出版社     南京
        3   东游   16.2        2    2     南京出版社     南京
        4   北邮   19.2        3    3     东京出版社     东京
    -连表并且 group by
        id     name         price         publish    name          addr
        1      金品         11.2             1       北京出版社      北京
        2,3    西游,东游     14.2,16.2       2       南京出版社      南京
        4      北邮         19.2             3       东京出版社      东京
    -能取的字段,聚合函数的字段,能取group by的字段,group by表中的所有字段
    
    -原生sql
		select publish.id,publish.name,publish.addr,avg(book.price) from book join publish on book.publish=publish.id group by publish.id
    -orm
  Book.object.values('publish__id').annotate(avg=Avg(price)).values('avg','publish__name')	

3 分组查询例子
	-查询出版社id大于1的出版社id,以及出书平均价格大于30的
    -Publish.objects.filter(id__gt=1).values('pk').annotate(avg=Avg('book__price')).filter(avg__gt=30).value('name','avg')
    
    
4 F和Q
	-F取出字段值,可以参与比较或者运算
    -Q:构造与或非 &  |  ~   and  or  not      &&   ||  !
    
5 defer和only
	-可以通过values取出咱们想要的字段,但是,一旦用了values是个字典
    -我们就想要指定的几个字段,但是,返回的对象还是book对象,使用defer
    -only:只取哪几个字段
    -defer:不取哪几个字段
    -一旦only了,就不要使用only中没有的字段了,一旦用了,又执行了一次sql,会影响效率
    
6 事务
	-原子性:要么都成功,要么都失败
    -多句的删除和更改sql,要么都成功,要么都失败
    -三种粒度:第一种用的多(局部)
        from django.db import transaction
    	with transaction.atomic():
            -在一个事物当中
7 原生sql
	-Book.objects.raw('原生sql')
            
    
```



# 今日内容

## 1 图书管理系统

```python
1 路由层,模板层,视图层,模型层----》图书管理系统
2 图书新增,查看,修改,删除,出版社增,查看,修改,删除,作者增,查看,修改,删除
3 CURD:create,update,retrive,delete

4 详见代码

```















# 作业

1 (拓展)新增图书,弹出模态框

2 把图书管理系统在这个基础上,完善,作者增删查改,出版社增删查改

3(拓展) python 中的in 比较的不是内存地址,而是值    不是is 而是 ==


posted @ 2020-10-25 12:26  π陈少π  阅读(46)  评论(0)    收藏  举报