1. 程式人生 > >Django---資料庫一系列操作

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()