1 Python 1.1 爬虫 |
1.1.1 多线程 |
1.1.2 B站 |
1.1.3 zmq71多线程爬取 |
1.1.4 jable.tv多线程爬取 |
1.1.4.1 jable.tv细节 |
1.1.5 python执行js代码 |
1.1.6 windows代理配置 |
1.2 Linux编译升级3.9版本 |
1.3 数据分析 |
1.3.1 预测考研成绩 |
2 Python django |
2.1 目录层面说明 |
2.1.1 urls.py |
2.1.2 settings.py |
2.1.3 M 模型数据库 |
2.1.4 T templates/...html |
2.1.5 V(逻辑处理) views.py |
2.2 django模板 |
2.2.1 模板标签 |
2.2.1.1 过滤器 |
2.2.1.2 标签 |
2.2.1.2.1 if/else |
2.2.1.2.2 for |
2.2.1.2.3 ifequal/ifnotequal |
2.2.1.2.4 csrf_token |
2.2.1.3 模板继承 |
2.2.2 自定义标签和过滤器 |
2.3 django模型ORM |
2.3.1 App应用 |
2.3.1.1 models.py |
2.3.2 SQL |
2.3.2.1 新增 |
2.3.2.2 删除 |
2.3.2.3 更新 |
2.3.2.4 查询 |
2.3.3 单表示例 |
2.3.4 多表示例 |
2.3.5 聚合查询 |
2.3.6 分组查询 |
2.4 django表单 |
2.4.1 GET |
2.4.2 POST |
2.4.3 Request |
2.5 django视图 |
2.6 django路由 |
2.7 django Admin管理 |
2.8 django组件 |
2.8.1 Form页面组件 |
2.8.2 Auth用户认证 |
2.8.3 Cookie/Session |
2.8.4 中间件 |
2.8.5 视图FBV/CBV |
2.9 django+nginx+uwsgi |
2.10 Python小知识 |
2.10.1 def __int__(self): |
2.10.2 def __str__(self): |
2.10.3 @staticmethod |
2.10.4 @wraps |
2.10.5 pycharm |
分组查询(annotate) 分组查询一般会用到聚合函数,所以使用前要先从 django.db.models 引入 Avg,Max,Min,Count,Sum(首字母大写)。 from django.db.models import Avg,Max,Min,Count,Sum # 引入函数返回值:
• 分组后,用 values 取值,则返回值是 QuerySet 数据类型里面为一个个字典;
• 分组后,用 values_list 取值,则返回值是 QuerySet 数据类型里面为一个个元组。
MySQL 中的 limit 相当于 ORM 中的 QuerySet 数据类型的切片。
统计每一个出版社的最便宜的书的价格: res = models.Publish.objects.values("name").annotate(in_price = Min("book__price")) print(res)
统计不止一个作者的图书名称: res = models.Book.objects.annotate(c = Count("authors__name")).filter(c__gt=0).values("title","c") print(res)
根据一本图书作者数量的多少对查询集 QuerySet 进行降序排序: res = models.Book.objects.annotate(c = Count("authors__name")).order_by("-c").values("title","c") print(res)
查询各个作者出的书的总价格: res = models.Author.objects.annotate(all = Sum("book__price")).values("name","all") print(res)
F() 查询 F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。 之前构造的过滤器都只是将字段值与某个常量做比较,如果想要对两个字段的值做比较,就需要用到 F()。 使用前要先从 django.db.models 引入 F: from django.db.models import F用法: F("字段名称")F 动态获取对象字段的值,可以进行运算。 Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取余的操作。 修改操作(update)也可以使用 F() 函数。 查询工资大于年龄的人:
实例 from django.db.models import F ... book=models.Emp.objects.filter(salary__gt=F("age")).values("name","age") ...
Q() 查询 使用前要先从 django.db.models 引入 Q:from django.db.models import Q用法: Q(条件判断)例如: Q(title__startswith="菜")之前构造的过滤器里的多个条件的关系都是 and,如果需要执行更复杂的查询(例如 or 语句),就可以使用 Q 。 Q 对象可以使用 & | ~ (与 或 非)操作符进行组合。 优先级从高到低:~ & | 可以混合使用 Q 对象和关键字参数,Q 对象和关键字参数是用"and"拼在一起的(即将逗号看成 and ),但是 Q 对象必须位于所有关键字参数的前面。 查询价格大于 350 或者名称以菜开头的书籍的名称和价格。 from django.db.models import Q 实例 ... res=models.Book.objects.filter(Q(price__gt=350)|Q(title__startswith="菜")).values("title","price") print(res) ...
查询以"菜"结尾或者不是 2010 年 10 月份的书籍: res = models.Book.objects.filter(Q(title__endswith="菜") | ~Q(Q(pub_date__year=2010) & Q(pub_date__month=10))) print(res)
查询出版日期是 2004 或者 1999 年,并且书名中包含有"菜"的书籍。 Q 对象和关键字混合使用,Q 对象要在所有关键字的前面: res = models.Book.objects.filter(Q(pub_date__year=2004) | Q(pub_date__year=1999), title__contains="菜") print(res)
|