最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年08月06日 08:59:50   作者:搗亂小子  
這篇文章主要介紹了Django 對象關系映射(ORM)源碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言

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

django ORM 源代碼組織結構

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

你已經吃透了 django 的 ORM, 定制自己的 ORM, 但必須用里面的規(guī)則, 比如類的屬性名等等;
又或者更換自己的 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 與`表關聯(lián)`相關
  ----signals.py
  ----__init__.py

django ORM 底層的實現都在 django.db.models 中. 如你所知, 數據庫操作的選項很多, 這里并不專注展開這些選項在 django ORM 中是如何實現的, 而將展開的是 django ORM 的實現的框架, 當用 django ORM 執(zhí)行一個簡單的查詢操作時, 里面是如何工作的, 工具類之間是如何協(xié)調的. 了解這些, 使用 django ORM 會更游刃有余.

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

相關文章

  • Python基于數列實現購物車程序過程詳解

    Python基于數列實現購物車程序過程詳解

    這篇文章主要介紹了Python基于數列實現購物車程序過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • python中關于對super()函數疑問解惑

    python中關于對super()函數疑問解惑

    Python中的super()是用于調用父類(或父類的父類...)方法的函數,主要用于多繼承,單繼承問題不大,下面這篇文章主要給大家介紹了關于python中關于對super()函數疑問解惑的相關資料,需要的朋友可以參考下
    2022-08-08
  • Python OpenCV實現視頻追蹤

    Python OpenCV實現視頻追蹤

    這篇文章主要為大家詳細介紹了Python OpenCV實現視頻追蹤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用Python的開發(fā)框架Brownie部署以太坊智能合約

    使用Python的開發(fā)框架Brownie部署以太坊智能合約

    在本文中,我們將使用Python部署智能合約。這篇文章可能是您走向智能合約和區(qū)塊鏈開發(fā)的橋梁!
    2021-05-05
  • 一文詳解Python中的行為驗證碼驗證功能

    一文詳解Python中的行為驗證碼驗證功能

    最近在開發(fā)行為驗證碼,經常觸及到關于驗證類型的相關內容。但使用起來不太熟練,所以本文就來總結一下對行為驗證碼驗證類型的理解
    2023-03-03
  • TensorFlow2.4完成Word2vec詞嵌入訓練方法詳解

    TensorFlow2.4完成Word2vec詞嵌入訓練方法詳解

    這篇文章主要為大家介紹了TensorFlow2.4完成Word2vec詞嵌入訓練方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • OpenCV圖像卷積之cv.filter2D()函數詳解

    OpenCV圖像卷積之cv.filter2D()函數詳解

    在其官方文檔中,filter2D()函數在掩模板介紹中一筆帶過,我認為該函數應該進行詳細介紹,下面這篇文章主要給大家介紹了關于OpenCV圖像卷積之cv.filter2D()函數的相關資料,需要的朋友可以參考下
    2022-09-09
  • Python使用asyncio.Queue進行任務調度的實現

    Python使用asyncio.Queue進行任務調度的實現

    本文主要介紹了Python使用asyncio.Queue進行任務調度的實現,它可以用于任務調度和數據交換,文中通過示例代碼介紹的非常詳細,感興趣的可以了解一下
    2024-02-02
  • Python實現socket非阻塞通訊功能示例

    Python實現socket非阻塞通訊功能示例

    這篇文章主要介紹了Python實現socket非阻塞通訊功能,結合實例形式分析了Python使用socket模塊進行非阻塞通訊的原理、多線程及客戶端、服務器端相關實現技巧,需要的朋友可以參考下
    2019-11-11
  • python中assert用法實例分析

    python中assert用法實例分析

    這篇文章主要介紹了python中assert用法,實例分析了assert的功能及相關使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論

永春县| 乐业县| 长丰县| 马山县| 宿松县| 甘孜| 泰和县| 深泽县| 樟树市| 宝清县| 临泽县| 柳河县| 安义县| 雷山县| 乐亭县| 社会| 漳州市| 文成县| 柘荣县| 钟祥市| 清新县| 新化县| 偃师市| 泰顺县| 长子县| 高雄县| 临夏县| 镇宁| 湟中县| 新津县| 武义县| 公主岭市| 汾西县| 轮台县| 西林县| 即墨市| 安远县| 辽阳县| 宁南县| 武邑县| 罗定市|