python
mysql
經過操做對象方法,來進行關係型數據庫操做sql
shell
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydb', 'HOST': 'localhost', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '123456', } }
繼承Model類(django.db.models.Model) 數據庫
from django.db import models # Create your models here. class Student(models.Model): name = models.CharField(max_length=20) sex = models.CharField(max_length=10) score = models.FloatField() class Meta: #定義表結構的信息 db_table = 'students'
模型類對應於數據庫表,類屬性 對應於表字段django
建立好模型後,遷移(同步到數據庫)緩存
1.製做遷移計劃併發
python manage.py makemigrationsapp
2.執行計劃任務函數
python manage.py migrate
【如下操做都是在shell環境中執行】
進入shell 環境
python manage.py shell
2.添加數據
2.1經過模型類的對象管理器插入記錄
【此方法是直接操做數據庫】
# 導入Student包 from myapp.models import Student stu1 = Student.objects.create(name='aaa',sex='m',score=95. 0)
2.2 實例化模型對象插入記錄
【注意:經過對象模型進行 插入操做是在內存中執行的,須要經過save函數加載到數據庫中】
stu3 = Student(name='a',sex='m',score=89) stu3.save()
3.添加記錄
3.1經過模型類的對象管理器插入記錄
語法:模型類名.objects.create(類屬性=值)
【此方法是直接操做數據庫】
# 導入Student包 from myapp.models import Student stu1 = Student.objects.create(name='aaa',sex='m',score=95. 0)
stu3 = Student(name='a',sex='m',score=89) stu3.save()
stu = Student.objects.get(id=1) stu.score = 100 stu.save() stu.delete()
1.查詢主鍵爲1的記錄 stu = Student.objects.get(id=1) get()返回一條記錄【即查詢條件爲惟一值且必須存在,通常查詢主鍵】,以模型對象表示
查詢全部: students1 = Student.objects.all() 返回Django的QuerySet對象,能夠被遍歷
4.2過濾查詢
模型類名.objects.filter(查詢條件)
s1 = Students.objects.filter(sex='m') 返回Django中的QuerySet容器,能夠被遍歷 多條件查詢,查詢條件使用,隔開表示邏輯與 s1 = Student.objects.filter(sex='m',name='aaa')
查詢分數小於85的學生記錄
students = Student.objects.exclude(score__gte=85)
字段後面跟雙下劃線"__",表示特殊查詢 經常使用的雙下劃線魔法參數有: __year __month __day __startswith __endswith __gte 大於等於 __lte 小於等於 __contains (至關於模糊查詢) s1 = Student.objects.filter(name__startswith='a')
s1 = Student.objects.all()[1:3] 查詢前三個 s1 = Student.objects.all()[:3] 查詢奇數條記錄 s1 = Student.objects.all()[::2]
4.6排序查詢
模型類名.objects.order_by("排序字段名")
降序 s1 = Student.objects.order_by('-score') 升序 s1 = Student.objects.order_by('score') 查詢成績前三名 s1 = Student.objects.order_by('-score')[:3]
# 模糊查詢 使用原生sql查詢名字中包含a的記錄 s1 = Student.objects.raw('select * from students where nam e like "%%a%%"') 至關於select * from students where name like "%a%" # 使用佔位符 查詢名字爲張三,性別爲男的學生信息,使用原生sql語句 s1 = Student.objects.raw('select * from students where nam e="%s" and sex="%s"'%('張三','男')) a='張三' b='男' s1 = Student.objects.raw('select * from students where na me="{a}" and sex="{b}"') s1 = Student.objects.raw('select * from students where nam e=%s and sex=%s',['張三','男'])
4.8Q查詢
經過實例化Q對象,將Q對象傳遞到filter()、get()方法中能夠組合出多種查詢條件
Q查詢依賴於Q對象(from django.db.models import Q)
Q對象之間可使用&、|。在Q對象前加~表示Q封裝條件的否認條件
查詢男生中90分以上的學生記錄 from django.db.models import Q q1 = Q(sex='男') q2 = Q(score__gte=90) s1 = Student.objects.filter(q1&q2) & :邏輯與 | :邏輯或 ~ :邏輯非
描述數據庫層級的操做,而不是內存層級的操做 即,能夠直接操做數據庫中的數據,而不是先更改緩存,再上傳數據庫 解決併發性問題 使用F對象更新學生成績,將1號學生成績在原有基礎上+5分 from django.db.models import F s1 = Student.objects.get(id=1) s1.score = F('score')+5 s1.save()
4.10 聚合查詢
可能要導入的:from django.db.models import Min,Avg,Max,Sum,Count
查詢全部學生的平均成績 from django.db.models import Avg,Max,Min,Count,Sum avg = Student.objects.aggregate(Avg('score')) avg = Student.objects.all().aggregate(as=Avg('score')) as 是avg對象的別名 查詢結果是一個字典
根據性別查詢不一樣性別的平均值 s1 = Student.objects.values('sex').annotate(Avg('score')) .values()方法能夠顯示對象中某個屬性的值,以字典形式存儲