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

Django 對(duì)象關(guān)系映射(ORM)源碼詳解

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

前言

從前面已經(jīng)知道, 一個(gè) request 的到來(lái)和一個(gè)對(duì)應(yīng) response 的返回的流程, 數(shù)據(jù)處理和數(shù)據(jù)庫(kù)離不開. 我們也經(jīng)常在 views.py 的函數(shù)定義中與數(shù)據(jù)庫(kù)打交道.

django ORM 源代碼組織結(jié)構(gòu)

對(duì)于數(shù)據(jù)庫(kù), django 有自己的一套 ORM(對(duì)象關(guān)系映射), 或許其他的框架可以隨意更換 ORM, 但 django 不建議這么做. 因?yàn)?django 內(nèi)置有很多的 model, 這些 model 無(wú)疑是用 django 內(nèi)置 ORM 實(shí)現(xiàn)的, 如果更換后, 內(nèi)置的 model 就無(wú)效了, 除非以下兩個(gè)選擇:

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

數(shù)據(jù)庫(kù)本身的復(fù)雜的, 數(shù)據(jù)庫(kù)操作涉及的選項(xiàng)有很多, 一個(gè) ORM 也并不簡(jiǎn)單. django 數(shù)據(jù)庫(kù)部分在 django.db 中實(shí)現(xiàn), 在展開之前先介紹一下它的源代碼文件組織:

django.db
----backends 各種數(shù)據(jù)庫(kù)后端實(shí)現(xiàn)
  ----dummy 啞后端, 什么都不做, 定義空方法
  ----mysql mysql 實(shí)現(xiàn)
  ----oracle oracle 實(shí)現(xiàn)
  ----.....
----models 重頭戲, backends 中各種數(shù)據(jù)庫(kù)都是基于此實(shí)現(xiàn)的
  ----fields 數(shù)據(jù)庫(kù)表字段實(shí)現(xiàn)
    ----.....
  ----sql 語(yǔ)句, 記錄 sql 語(yǔ)句的各種選項(xiàng), where 等, 最后生成 sql 語(yǔ)句; 連接數(shù)據(jù)庫(kù)得到結(jié)果
    ----.....
  ----aggregates.py 聚合相關(guān)
  ----base.py 定義 Model 類
  ----constants.py 一些常量
  ----deletion.py 數(shù)據(jù)庫(kù)表項(xiàng)的刪除實(shí)現(xiàn)
  ----expressions.py 表達(dá)式類, where 會(huì)出現(xiàn)表達(dá)式
  ----loading.py
  ----manager.py ORM 的管理器
  ----options.py 數(shù)據(jù)庫(kù)表選項(xiàng), 譬如主鍵等
  ----query.py 數(shù)據(jù)庫(kù)查詢集類
  ----query_utils.py 小工具
  ----related.py 與`表關(guān)聯(lián)`相關(guān)
  ----signals.py
  ----__init__.py

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

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

相關(guān)文章

  • Python基于數(shù)列實(shí)現(xiàn)購(gòu)物車程序過(guò)程詳解

    Python基于數(shù)列實(shí)現(xiàn)購(gòu)物車程序過(guò)程詳解

    這篇文章主要介紹了Python基于數(shù)列實(shí)現(xiàn)購(gòu)物車程序過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python中關(guān)于對(duì)super()函數(shù)疑問(wèn)解惑

    python中關(guān)于對(duì)super()函數(shù)疑問(wèn)解惑

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

    Python OpenCV實(shí)現(xiàn)視頻追蹤

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

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

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

    一文詳解Python中的行為驗(yàn)證碼驗(yàn)證功能

    最近在開發(fā)行為驗(yàn)證碼,經(jīng)常觸及到關(guān)于驗(yàn)證類型的相關(guān)內(nèi)容。但使用起來(lái)不太熟練,所以本文就來(lái)總結(jié)一下對(duì)行為驗(yàn)證碼驗(yàn)證類型的理解
    2023-03-03
  • TensorFlow2.4完成Word2vec詞嵌入訓(xùn)練方法詳解

    TensorFlow2.4完成Word2vec詞嵌入訓(xùn)練方法詳解

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

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

    在其官方文檔中,filter2D()函數(shù)在掩模板介紹中一筆帶過(guò),我認(rèn)為該函數(shù)應(yīng)該進(jìn)行詳細(xì)介紹,下面這篇文章主要給大家介紹了關(guān)于OpenCV圖像卷積之cv.filter2D()函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn)

    Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn)

    本文主要介紹了Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn),它可以用于任務(wù)調(diào)度和數(shù)據(jù)交換,文中通過(guò)示例代碼介紹的非常詳細(xì),感興趣的可以了解一下
    2024-02-02
  • Python實(shí)現(xiàn)socket非阻塞通訊功能示例

    Python實(shí)現(xiàn)socket非阻塞通訊功能示例

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

    python中assert用法實(shí)例分析

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

最新評(píng)論

南和县| 称多县| 盱眙县| 江华| 望谟县| 黄龙县| 鄂温| 怀仁县| 翁源县| 镇沅| 漳州市| 邹平县| 宣汉县| 东至县| 长春市| 葫芦岛市| 繁昌县| 托克托县| 神池县| 白银市| 沙湾县| 确山县| 桦川县| 手机| 望城县| 闽侯县| 左云县| 吴堡县| 渑池县| 舒兰市| 高要市| 江山市| 铜川市| 宁安市| 三穗县| 铁力市| 海南省| 花莲市| 宁阳县| 易门县| 青海省|