Django教程

創(chuàng)建項目

# 創(chuàng)建項目
django-admin startproject [projectName]
# 創(chuàng)建模塊
python manage.py startapp [moduleName]

對于Mysql數(shù)據(jù)庫:需要安裝pymysql這個第三方庫

安裝命令:pip3 install mysqlclient

數(shù)據(jù)庫配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '172.0.0.1',
        'PORT': 3306
    }
}

模型

5.2 數(shù)據(jù)查詢

要從數(shù)據(jù)庫檢索數(shù)據(jù), 首先要獲取一個查詢集(Query Set) , 查詢集表示從數(shù)據(jù)庫獲取的對象集合,它可以有零個,一個或多個過濾器。返回查詢集的方法,稱為過濾器, 過濾器根據(jù)給定的參數(shù)縮小查詢結(jié)果范圍, 相當于sql語句中where或limit。

  • 在管理器上調(diào)用過濾器方法會返回查詢集
  • 查詢集經(jīng)過過濾器篩選后返回新的查詢集,因此可以寫成鏈式過濾
  • 惰性執(zhí)行; 創(chuàng)建查詢集不會帶來任何數(shù)據(jù)庫的訪問,直到調(diào)用數(shù)據(jù)時,才會訪 問數(shù)據(jù)庫 。
  • 以下對查詢集求值:迭代、切片、序列化、與if合用 repr() /print(/len() /list() /boo()
管理器的方法 返回類型 說明
模型類.objects.all() Query Set 返回表中所有數(shù)據(jù)
模型類.objects.filter() Query Set 返回符合條件的數(shù)據(jù)
模型類.objects.exclude() Query Set 返回不符合條件的數(shù)據(jù)
模型類.objects.order_by() Query Set 對查詢結(jié)果集進行排序
模型類.objects.values() Query Set 返回一個Query set, 其中每個對象為一個
模型類.objects.values_list() Query Set 和values() 基本相同, 但每個對象是一個元
模型類.objects.reverse() Query Set 對排序的結(jié)果反轉(zhuǎn)
模型類.objects.only(字段) Query Set 只顯示指定字段
類.objects.defer(字段) Query Set 去除指定字段
模型類.objects.get() 模型對象 + 返回一個滿足條件的對象; 如果沒有找到符合條件的對象,會引發(fā)模型類.Does Not Exist異常 + 如果找到多個,會引發(fā)模型 類.Multi Objects Returned異常
模型類.objects.first() 模型對象 返回第一條數(shù)據(jù)
模型類.objects.last() 模型對象 返回最后一條數(shù)據(jù)
模型類.objects.earliest () 模型對象 根據(jù)指定字段返回最早增加的記錄
模型類.objects.latest(field) 模型對象 根據(jù)field字段返回最近增加記錄
模型類.objects.exists() bool 判斷查詢的數(shù)據(jù)是否存在
模型類.objects.count() int 返回查詢集中對象的數(shù)目
  • all()
# 獲取所有數(shù)據(jù) 
對應(yīng)SQL:select * from User
users= User.objects.all()
  • filter(**kwargs) 返回QuerySet包含與給定查找參數(shù)匹配的新查詢集。
等價于:select * from User
User.objects.filter()

對應(yīng)SQL:select * from User where username='admin'
User.objects.filter(username='admin')

對應(yīng)SQL:select * from User where id >1 and type=2
User.objects.fileter(id__gt=1, type=2)

對應(yīng)SQL:select * from User where id >1 and type = 2
User.objects.filter(id_gt=1).filter(type=2)
  • exclude(**kwargs)
對應(yīng)SQL:select * from User where username != 2
User.objects.exclude(username='admin')
  • order_by(*fields)
    參數(shù)是字段名、可以有多個字段名,默認是升序
    如果要按某個字段降序。在字段名前面加"-": "id"表示按id降序排列
按照id升序排列 對應(yīng)SQL:select * from User order by id
User.objects.order_by('id')

按照id降序排列 對應(yīng)SQL:select * from User order by id desc
User.objects.order_by('-id')

按照username升序排列 按照id降序排列 對應(yīng)SQL: select *from User order by username, id desc
User.objects.order_by('username', '-id')
  • values()
返回所有字段 對應(yīng)SQL: select * from User
User.objects.values()

返回所有數(shù)據(jù)的username 和 password 字段 對應(yīng)SQL: select username, password from User
User.objects.values('username', 'password')
  • reverse()
    對排序的結(jié)果反轉(zhuǎn)
對應(yīng)SQL: select * from User order by id desc
User.objects.order_by('id').reverse()
對應(yīng)SQL: select * from User order by id
User.objects.order_by('-id').reverse()
  • distinct() 去重
對應(yīng)SQL: select DISTINCT username from User
User.objects.values('username').distinct()

5.2.5統(tǒng)計查詢

需要先導入模塊:

from django.db.models import Max, Min, Sum, Avg, Count 
  • 聚合查詢:對多行查詢結(jié)果的一列進行操作
#統(tǒng)計記錄總數(shù): select count(*) from user 
User.objects.aggregate(Count('uid') )           #{'uid_count':4} 
User.objects.aggregate(Max('uid') )             #{'uid max':5} 
User.objects.aggregate(Min('uid') )             #{'uid min':2} 
  • 分組統(tǒng)計
# 等價sql:
select type, count(*) from usergroup by type
res=User.objects.values('type') .annotate(Count('uid') ) 
# 統(tǒng)計結(jié)果:
[{"type": :' 普通用戶', 'uid count':3} ,{'type':'超級管理員', 'uid count':1} ]

# 查看生成的sql語句 
print(res.query) 


#  此語法忘了沒搞明白
SELECT`user`.`type`, COUNT(`user`.uid`) )AS ; `uid d count t` FROM `user` GROUP BY `user`.`type`ORDER BY NULL

5.2.6 Q對象和F對象

需要先導入模塊:

from django.db.models import Q,F
  • Q對象可以對關(guān)鍵字參數(shù)進行封裝, 從而更好的應(yīng)用多個查詢, 可以組合&(and) 、I(or) 、~(not) 操作符。
#原生sql:
select * from user where uid=2 or uid= 3  
User.objects.filter(Q(uid=2) | Q(uid=3) ) 
User.objects.filter(Q(uid gte=2) &Q(uidl te=3) )  
User.objects.filter(~Q(uid gte=2) ) 
  • F對象:用于比較表中兩個字段
#等價sql:
select * from user where uid<type 
User.objects.filter(uidl te=F('type') )
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 聚合查詢 聚合查詢是指對一個數(shù)據(jù)表中的一個字段的數(shù)據(jù)進行部分或全部進行統(tǒng)計查詢,查bookstore_book數(shù)據(jù)...
    南坡三舅閱讀 420評論 0 0
  • 靜態(tài)文件 什么是靜態(tài)文件不能與服務(wù)器端做動態(tài)交互的文件都是靜態(tài)文件如:圖片,css,js,音頻,視頻,html文件...
    南坡三舅閱讀 841評論 0 0
  • 數(shù)據(jù)庫的操作(CRUD操作) CRUD是指在做計算處理時的增加(Create)、讀取查詢(Read)、更新(Upd...
    南坡三舅閱讀 691評論 0 1
  • 我們繼續(xù)教程1的部分開始。我們將要建立數(shù)據(jù)庫,創(chuàng)建你的第一個模型,并且快速簡介django的自動生成后臺管理系統(tǒng)。...
    轉(zhuǎn)身丶即天涯閱讀 821評論 0 8
  • Django教程--model教程 經(jīng)過前面幾節(jié),我們已經(jīng)簡單的了解了在Django中如何進行模板渲染、參數(shù)和文件...
    iffly閱讀 1,035評論 0 3

友情鏈接更多精彩內(nèi)容