從前面已經知道, 一個 request 的到來和一個對應 response 的返回的流程, 數據處理和數據庫離不開. 咱們也常常在 views.py 的函數定義中與數據庫打交道.python
對於數據庫, django 有本身的一套 ORM(對象關係映射), 或許其餘的框架能夠隨意更換 ORM, 但 django 不建議這麼作. 由於 django 內置有不少的 model, 這些 model 無疑是用 django 內置 ORM 實現的, 若是更換後, 內置的 model 就無效了, 除非如下兩個選擇:mysql
django 是一個大而全的框架, 但大而全卻又增長了它自己的負擔, 使其靈活性大大下降. 因此你看, 高內聚低耦合不容易作到.git
數據庫自己的複雜的, 數據庫操做涉及的選項有不少, 一個 ORM 也並不簡單. django 數據庫部分在 django.db 中實現, 在展開以前先介紹一下它的源代碼文件組織:github
django.db ----backends 各類數據庫後端實現 ----dummy 啞後端, 什麼都不作, 定義空方法 ----mysql mysql 實現 ----oracle oracle 實現 ----..... ----models 重頭戲, backends 中各類數據庫都是基於此實現的 ----fields 數據庫表字段實現 ----..... ----sql 語句, 記錄 sql 語句的各類選項, where 等, 最後生成 sql 語句; 鏈接數據庫獲得結果 ----..... ----aggregates.py 聚合相關 ----base.py 定義 Model 類 ----constants.py 一些常量 ----deletion.py 數據庫表項的刪除實現 ----expressions.py 表達式類, where 會出現表達式 ----loading.py ----manager.py ORM 的管理器 ----options.py 數據庫表選項, 譬如主鍵等 ----query.py 數據庫查詢集類 ----query_utils.py 小工具 ----related.py 與`表關聯`相關 ----signals.py ----__init__.py
django ORM 底層的實現都在 django.db.models 中. 如你所知, 數據庫操做的選項不少, 這裏並不專一展開這些選項在 django ORM 中是如何實現的, 而將展開的是 django ORM 的實現的框架, 當用 django ORM 執行一個簡單的查詢操做時, 裏面是如何工做的, 工具類之間是如何協調的. 瞭解這些, 使用 django ORM 會更遊刃有餘.sql
我已經在 github 備份了 Django 源碼的註釋: Decode-Django, 有興趣的童鞋 fork 吧.數據庫
搗亂 2013-9-22express
http://daoluan.netdjango