python專案篇-複習分組和聚合
阿新 • • 發佈:2019-01-04
1. 複習下分組和聚合 1. 分組 ORM中values或者values_list 裡面寫什麼欄位,就相當於select 什麼欄位 ret = models.Employee.objects.all().values("dept", "age") 相當於: SELECT `employee`.`dept`, `employee`.`age` FROM `employee` LIMIT 21; args=() 2. ORM中 annotate 前面是什麼就按照什麼分組! from django.db.models import Avg ret = models.Employee.objects.values("province").annotate(a=Avg("salary")).values("province", "a") 相當於: SELECT `employee`.`province`, AVG(`employee`.`salary`) AS `a` FROM `employee` GROUP BY `employee`.`province` ORDER BY NULL LIMIT 21; args=() 3. extra --> 在執行ORM查詢的時候執行額外的SQL語句 # 查詢person表,判斷每個人的工資是否大於2000 ret = models.Person.objects.all().extra( select={"gt": "salary > 2000"} ) 相當於: SELECT (salary > 2000) AS `gt`, `person`.`id`, `person`.`name`, `person`.`salary`, `person`.`dept_id` FROM `person` LIMIT 21; args=() 4. 直接執行原生的SQL語句,類似pymysql的用法 from django.db import connection cursor = connection.cursor() # 獲取游標,等待執行SQL語句 cursor.execute("""SELECT * from person where id = %s""", [1]) row = cursor.fetchone() print(row) 2. 個人站點首頁 - 分組和聚合查詢 1. 文章分類 2. 標籤分類 3. 日期歸檔 1. MySQL內建的方法:date_format(欄位名, "%Y-%m") 2. extra() --> 執行額外的原生SQL語句 ret = models.Article.objects.filter(user=user).extra( select={"archive_ym": "date_format(create_time,'%%Y-%%m')"} ).values("archive_ym").annotate(c=Count("nid")).values("archive_ym", "c")