-
MySQL 只支持并集查詢
查看全部 -
obj.values? ?元組含對象名稱
obj.values_list? ?只含內(nèi)容
obj.values_list flat=true? (單個)
查看全部 -
反向排序 ,需要在Meta 中設置ordering = ['字段名']
查看全部 -
查看原生sql
Teacher.objects.filter(fans__gte=500).order_by('nickname')
str(xxx.query)
查看全部 -
字段雙下劃線,匹配條件
查看全部 -
objects.get? ?返回模型列
filter 返回 query set
查看全部 -
批量導入數(shù)據(jù) 2:00
查看全部 -
from django.shortcuts import render
from django.views.generic import View
from .models import *
def course_view(request):
? ?# 1.查詢、檢索、過濾
? ?teachers = Teacher.objects.all()
? ?print(teachers) ?# 返回查詢集
? ?# <QuerySet [<Teacher: Teacher object (holy)>, <Teacher: Teacher object (Jack)>, <Teacher: Teacher object (Allen)>]>
? ?teacher1 = Teacher.objects.get(nickname='Jack') ?# 返回一條結(jié)果
? ?print(teacher1, type(teacher1))
? ?# Teacher object (Jack) <class 'course.models.Teacher'>
? ?teacher2 = Teacher.objects.filter(fans__gte=500) ?# QuerySet 可以是多條結(jié)果
? ?for t in teacher2:
? ? ? ?print(f'講師姓名{t.nickname}--粉絲數(shù){t.fans}')
? ? ? ?# 講師姓名Jack--粉絲數(shù)666
? ? ? ?# 講師姓名Henry--粉絲數(shù)899
? ?# 2. 字段字符匹配,大小寫敏感
? ?teacher3 = Teacher.objects.filter(fans__in=[666, 1200])
? ?print(teacher3)
? ?# <QuerySet [<Teacher: Teacher object (Jack)>]>
? ?teacher4 = Teacher.objects.filter(nickname__icontains='A')
? ?print(teacher4)
? ?# <QuerySet [<Teacher: Teacher object (Jack)>, <Teacher: Teacher object (Allen)>]>
? ?# 3.結(jié)果切片、排序、鏈式查詢
? ?print(Teacher.objects.all()[:1])
? ?teacher5 = Teacher.objects.all().order_by('-fans')
? ?for teacher in teacher5:
? ? ? ?print(teacher.nickname, teacher.fans)
? ? ? ?# Henry 899
? ? ? ?# Jack 666
? ? ? ?# Allen 123
? ? ? ?# holy 0
? ?print(Teacher.objects.filter(fans__gte=500).order_by('nickname'))
? ?# <QuerySet [<Teacher: Teacher object (Henry)>, <Teacher: Teacher object (Jack)>]>
? ?# 4. 查看執(zhí)行的原生SQL ? ? str(xx.query)
? ?print(str(Teacher.objects.all().query))
? ?# SELECT "course_teacher"."nickname", "course_teacher"."introduction",
? ?# ? ?"course_teacher"."fans", "course_teacher"."created_at", "course_teacher"."updated_at" FROM "course_teacher"
? ?return render(request, 'course.html')查看全部 -
所有字段都有的屬性值
help_text: 在表單中顯示幫助信息的參數(shù)
db_index: 為當前字段建立索引, 默認為False
null/blank: 字段是否可以為空, null約束數(shù)據(jù)庫層面, blank約束前端表單提交時是否為空
unique: 唯一性約束, 默認為False
verbose_name: 設置字段別名(或備注)
primary_key: 設置當前字段是否為主鍵, 默認為False
db_column: 設置當前字段的名稱,在數(shù)據(jù)庫中表的名稱
editable: 是否可以編輯, 默認為False
屬于個別字段的參數(shù)
max_length[CharField]:最大長度
unique_for_date[DateField]: 字段日期必須唯一
unique_for_month[DateField]:月份唯一
auto_now[DateField]: 修改記錄時是否自動更新當前日期
auto_now_add[DateField]: 添加記錄時是否自動設置當前日志
max_digits[DecimalField]: 總共有多少位
decimal_places[DecimalField]: 小數(shù)點后數(shù)字的個數(shù)
關系型字段的參數(shù)
CASCADE: 模擬SQL語言中的ON DELETE CASCADE約束,將定義有外鍵的模型對象同時刪除(該操作為當前Django版本的默認操作)
PROTECT: 阻止上面的刪除操作, 彈出ProtectedError異常
SET_NULL: 將外鍵字段設為null, 只有當字段設置了null=True時, 方可使用該值
SET_DEFAULT: 將外鍵字段設為默認值, 只有當字段設置了default參數(shù)時,方可使用
DO_NOTHING: 什么也不做
SET(): 設置為一個傳遞給SET()的值或者一個回調(diào)函數(shù)的返回值, 注意大小寫
related_name: 外鍵關聯(lián)中的反向查詢,由父表查詢子表的信息
on_delete: 當一個被外鍵關聯(lián)的對象被刪除時,Django將模仿on_delete參數(shù)定義的SQL約束執(zhí)行相應操作
查看全部 -
類=數(shù)據(jù)表,對象=數(shù)據(jù)行,屬性=字段
查看全部 -
Student.object.all().exclude(nickname='A') :不包括
Student.object.all().reverse()對結(jié)果集反向排序:需要在Meta中先ordering
Student.object.all().distinct():對結(jié)果集去重
Student.object.all().extra(select={"name": "nickname"})? 對結(jié)果集中的nickname字段起一個name的別名
Student.object.all().only('nickname', 'age')?對結(jié)果集中的字段做選擇,只顯示選擇的字段
Student.object.all().defer('nickname')? 和only相反,排除一些字段
Student.object.values('nickname', 'hobby') 返回結(jié)果是QuerySet的列表嵌套一個個字典
Student.object.values_list('nickname', hobby')返回結(jié)果是QuerySet的列表嵌套一個個組
Student.object.values_list('nickname', flag=True) 當values_list只有一個字段時使用flag=True,可以將返回的結(jié)果QuerySet直接放在列表里,沒有嵌套
Course.objects.dates('created_at', 'month', order='DESC') 返回以字段created_at的月份(去重后)降序的結(jié)果集(year, month, day)
Course.objects.datetimes('created_at', 'munite', order='DESC')?返回以字段created_at的分鐘(去重后)降序的結(jié)果集(year, month, day, hour, munite, second)
union()并集? ?intersection()交集? ?difference()差集
p1 = Course.objects.filter(price__gte=240)
p2 = Course.objects.filter(price__lte=240)
p1.union(p2)
p1.intersection(p2)
p1.difference(p2)
通過子表查父表(外鍵都設置在子表中)
select_related() 一對一,多對一查詢優(yōu)化(查詢子表的時候一次將父表的信息也查出來)
courses = Course.objects.all().select_related('teacher')? 原生的SQL語句會變的很少
for c in?courses:
????? ?print(f"{c.title}--{c.teacher.nickname}")
prefetch_related() 一對多,多對多查詢優(yōu)化
students = Students.objects.filter(age__lt=30).prefetch_related('course')
for s in students:
????????print(s.course.all())
通過父表查子表(外鍵都設置在子表中):反向查詢
Teacher.objects.get(nickname='Jack').course_set.all()? 通過父表Teacher查Course,需要小寫類名_set獲取子表的信息
如果子表的外鍵中設置有屬性related_name='relate' 可以使用下面的方法替代course_set
Teacher.objects.get(nickname='Jack').relate.all()
annotate() 使用聚合計數(shù),Count, Sum, Avg, Max, Min
annotate(vol=Sum('valume'))? annotate(別名=Sum('字段名'))
Course.objects.values('teacher').annotate(vol=Sum('valume'))
Course.objects.values('teacher').annotate(pri=Sum('price'))
查看全部 -
query來顯示原生的sql語句
查看全部 -
配置url路由。
查看全部 -
定義視圖類和函數(shù)。
查看全部 -
定義模型和字段。
查看全部
舉報