91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django 對象關系映射(ORM)源碼詳解

發布時間:2020-08-31 16:45:26 來源:腳本之家 閱讀:151 作者:搗亂小子 欄目:開發技術

前言

從前面已經知道, 一個 request 的到來和一個對應 response 的返回的流程, 數據處理和數據庫離不開. 我們也經常在 views.py 的函數定義中與數據庫打交道.

django ORM 源代碼組織結構

對于數據庫, django 有自己的一套 ORM(對象關系映射), 或許其他的框架可以隨意更換 ORM, 但 django 不建議這么做. 因為 django 內置有很多的 model, 這些 model 無疑是用 django 內置 ORM 實現的, 如果更換后, 內置的 model 就無效了, 除非以下兩個選擇:

你已經吃透了 django 的 ORM, 定制自己的 ORM, 但必須用里面的規則, 比如類的屬性名等等;
又或者更換自己的 ORM, 不使用 django 內置的 model.
django 是一個大而全的框架, 但大而全卻又增加了它本身的負擔, 使其靈活性大大降低. 所以你看, 高內聚低耦合不容易做到.

數據庫本身的復雜的, 數據庫操作涉及的選項有很多, 一個 ORM 也并不簡單. django 數據庫部分在 django.db 中實現, 在展開之前先介紹一下它的源代碼文件組織:

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 會更游刃有余.

我已經在 github 備份了 Django 源碼的注釋: Decode-Django, 有興趣的童鞋 fork 吧.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇沅| 汨罗市| 醴陵市| 琼结县| 思南县| 新余市| 扎兰屯市| 景东| 筠连县| 滦南县| 桐城市| 安西县| 通州区| 泸水县| 台北县| 吉水县| 遂溪县| 洛浦县| 克拉玛依市| 德令哈市| 嫩江县| 崇义县| 上犹县| 洪泽县| 峡江县| 永新县| 九龙城区| 上高县| 北安市| 托里县| 建始县| 永安市| 丰原市| 汉寿县| 澄城县| 古田县| 滦平县| 蓬莱市| 图木舒克市| 颍上县| 林周县|