Django---資料庫一系列操作
一:配置
在settings.py中儲存了資料庫的連線配置資訊,Django預設初始配置使用sqlite資料庫。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
使用MySQL資料庫首先需要安裝驅動程式
pip install PyMySQL
在Django的工程同名子目錄的**init.py**檔案中新增如下語句
from pymysql import install_as_MySQLdb
install_as_MySQLdb()
作用是讓Django的ORM能以mysqldb的方式來呼叫PyMySQL。
修改DATABASES配置資訊
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', # 資料庫主機 'PORT': 3306, # 資料庫埠 'USER': 'root', # 資料庫使用者名稱 'PASSWORD': 'mysql', # 資料庫使用者密碼 'NAME': 'django_demo' # 資料庫名字 } }
在MySQL中建立資料庫
create database django_demo default charset=utf8;
1) 資料庫表名
模型類如果未指明表名,Django預設以 小寫app應用名_小寫模型類名 為資料庫表名。
可通過db_table 指明資料庫表名。
2) 關於主鍵
django會為表建立自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。
預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
3) 屬性命名限制
不能是python的保留關鍵字。
不允許使用連續的下劃線,這是由django的查詢方式決定的。
定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,語法如下:
屬性=models.欄位型別(選項)
2 遷移
將模型類同步到資料庫中。
1)生成遷移檔案
python manage.py makemigrations
2)同步到資料庫中
python manage.py migrate
二 .演示工具使用
1 shell工具
python manage.py shel
2 檢視MySQL資料庫日誌
tail -f /var/log/mysql/mysql.log # 可以實時檢視資料庫的日誌內容
# 如提示需要sudo許可權,執行
# sudo tail -f /var/log/mysql/mysql.log
三.資料庫操作—增、刪、改、查
1 增加
增加資料有兩種方法。
1)save
2)create
通過模型類.objects.create()儲存。
2 查詢
2.1 基本查詢
get 查詢單一結果,如果不存在會丟擲模型類.DoesNotExist異常。
all 查詢多個結果。
count 查詢結果數量。
2.2 過濾查詢
實現SQL中的where功能,包括
filter 過濾出多個結果
exclude 排除掉符合條件剩下的結果
get 過濾單一結果
對於過濾條件的使用,上述三個方法相同,故僅以filter進行講解。
過濾條件的表達語法如下:
屬性名稱__比較運算子=值
屬性名稱和比較運算子間使用兩個下劃線,所以屬性名不能包括多個下劃線
1)相等
exact:表示判等。
2)模糊查詢
contains:是否包含。
說明:如果要包含%無需轉義,直接寫即可。
3) 空查詢
isnull:是否為null。
4) 範圍查詢
in:是否包含在範圍內。
5)比較查詢
gt 大於 (greater then)
gte 大於等於 (greater then equal)
lt 小於 (less then)
lte 小於等於 (less then equal)
**不等於的運算子,使用exclude()過濾器。
6)日期查詢
year、month、day、week_day、hour、minute、second:對日期時間型別的屬性進行運算。
F物件
之前的查詢都是物件的屬性與常量值比較,兩個屬性怎麼比較呢? 答:使用F物件,被定義在django.db.models中。
語法如下:
F(屬性名)
Q物件
多個過濾器逐個呼叫表示邏輯與關係,同sql語句中where部分的and關鍵字。
**如果需要實現邏輯或or的查詢,需要使用Q()物件結合|運算子,Q物件被義在django.db.models中。
聚合函式
使用aggregate()過濾器呼叫聚合函式。聚合函式包括:Avg 平均,Count 數量,Max 最大,Min 最小,Sum 求和,被定義在django.db.models中。
注意aggregate的返回值是一個字典型別,格式如下:
{‘屬性名__聚合類小寫’:值}
如:{‘bread__sum’:3}
2.3 排序
使用order_by對結果進行排序
2.4 關聯查詢
由一到多的訪問語法:
關聯過濾查詢
由多模型類條件查詢一模型類資料:
語法如下:
關聯模型類名小寫__屬性名__條件運算子=值
注意:如果沒有"__運算子"部分,表示等於。
由一模型類條件查詢多模型類資料:
語法如下:
一模型類關聯屬性名__一模型類屬性名__條件運算子=值
注意:如果沒有"__運算子"部分,表示等於。
3 修改
修改更新有兩種方法
1)save
修改模型類物件的屬性,然後執行save()方法
2)update
使用模型類.objects.filter().update(),會返回受影響的行數
4 刪除
刪除有兩種方法
1)模型類物件delete
2)模型類.objects.filter().delete()