材料類別
網頁教學
技術類別
Django
重要性
⭐️⭐️⭐️
完成
完成
更新
Nov 16, 2021
已過天數
7
相關行動
前言
Django的教程寫到這裡,就進入了整體的第二部分,也是最關鍵的部分。此時有一個問題必須想清楚,那就是,以項目帶動內容還是以參考書目的方式展開?為此,我考慮了很久
我在開始學習Django的時候,也看過許多教程和博客,有的專述某個細節,雖然比較深入,但不夠全面;有的比較泛泛但不夠深入。有的以項目帶動,簡單易懂,可以跟著一步步做,但做完了,只學到作者的幾個小技巧,對Django仍然是一知半解。都知道用Django的ORM可以方便的操作數據庫,但你知道Django有幾種數據庫API麼?都知道模板過濾器很有幫助,但你都用過麼,是不是只會大小寫轉換?
好了,這樣似乎就Ok了。但是,如果你有很多的數據庫操作,並且你的Python程序員不是專業的DBA,寫的SQL語句很爛,甚至經常寫錯,怎麼辦?
聰明的人想出了一個辦法:用Python語法來寫,然後使用一個中間工具將Python代碼翻譯成原生的SQL語句,這樣你總不會寫錯了吧?這個中間工具就是所謂的ORM(對象關系映射)!
ORM將一個Python的對象映射為數據庫中的一張關系表。它將SQL封裝起來,程序員不再需要關心數據庫的具體操作,只需要專注於自己本身代碼和業務邏輯的實現
於是,整體的實現過程就是:Python代碼,通過ORM轉換成SQL語句,再通過pymysql去實際操作數據庫

最典型的ORM就是SQLAlchemy了,如果你的Web框架自身不帶ORM系統,那麼你可以安裝使用它,SQLAlchemy使用者還是比較多的,本身功能也比較強大,大家可以自行學習
Django自帶ORM系統,不需要額外安裝別的ORM。當然,也可以安裝並使用其它的ORM,比如SQLAlchemy,但是不建議這麼做,因為Django系統龐大,集成完善,模型層與視圖層、模板層結合得比較緊密,使用自帶的ORM更方便更可靠,並且Django自帶的ORM功能也非常強大,也不難學
模型和字段
一個模型(model)就是一個單獨的、確定的數據的信息源,包含了數據的字段和操作方法。通常,每個模型映射為一張數據庫中的表
基本的原則如下:
- 每個模型在Django中的存在形式為一個Python類
- 每個類都是
django.db.models.Model的子類
- 模型(類)的每個字段(屬性、field)代表數據表的某一欄位
- Django自動為你生成訪問數據庫的API
簡單示例
下面的模型定義了一個“人”,它具有
first_name和last_name字段:每一個字段都是一個類屬性(class field member),每個類屬性表示數據表中的一個欄位
上面的代碼,相當於下面的原生SQL語句:
注意:
- ⭐️表名
myapp_person由Django自動生成,默認格式為“項目名稱+下劃線+小寫類名”,你可以重寫這個規則
- Django會自動創建自增主鍵
id,當然,你也可以自己指定主鍵
- 上面的SQL語句基於
PostgreSQL語法
通常,我們會將模型編寫在其所屬app下的
models.py文件中,沒有特別需求時,請堅持這個原則,不要自己給自己添加麻煩創建了模型之後,在使用它之前,你需要先在settings文件中的
INSTALLED_APPS 處,注冊models.py文件所在的myapp。看清楚了,是注冊app,不是模型,也不是models.py。如果你以前寫過模型,可能已經做過這一步工作,可跳過當你每次對模型進行增、刪、修改時,請務必執行命令
python manage.py migrate,讓操作實際應用到數據庫上。這裡可以選擇在執行migrate之前,先執行python manage.py makemigrations讓修改動作保存到記錄文件中,方便github等工具的使用》沒
makemigrations應該也是無法migrate吧?→應該是無法