欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

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

django.db
----backends 各種數(shù)據(jù)庫后端實(shí)現(xiàn)
  ----dummy 啞后端, 什么都不做, 定義空方法
  ----mysql mysql 實(shí)現(xiàn)
  ----oracle oracle 實(shí)現(xiàn)
  ----.....
----models 重頭戲, backends 中各種數(shù)據(jù)庫都是基于此實(shí)現(xiàn)的
  ----fields 數(shù)據(jù)庫表字段實(shí)現(xiàn)
    ----.....
  ----sql 語句, 記錄 sql 語句的各種選項(xiàng), where 等, 最后生成 sql 語句; 連接數(shù)據(jù)庫得到結(jié)果
    ----.....
  ----aggregates.py 聚合相關(guān)
  ----base.py 定義 Model 類
  ----constants.py 一些常量
  ----deletion.py 數(shù)據(jù)庫表項(xiàng)的刪除實(shí)現(xiàn)
  ----expressions.py 表達(dá)式類, where 會(huì)出現(xiàn)表達(dá)式
  ----loading.py
  ----manager.py ORM 的管理器
  ----options.py 數(shù)據(jù)庫表選項(xiàng), 譬如主鍵等
  ----query.py 數(shù)據(jù)庫查詢集類
  ----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ù)庫操作的選項(xiàng)很多, 這里并不專注展開這些選項(xiàng)在 django ORM 中是如何實(shí)現(xiàn)的, 而將展開的是 django ORM 的實(shí)現(xiàn)的框架, 當(dāng)用 django ORM 執(zhí)行一個(gè)簡單的查詢操作時(shí), 里面是如何工作的, 工具類之間是如何協(xié)調(diào)的. 了解這些, 使用 django ORM 會(huì)更游刃有余.

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

相關(guān)文章

  • Python數(shù)據(jù)可視化之Pyecharts使用詳解

    Python數(shù)據(jù)可視化之Pyecharts使用詳解

    Pyecharts是一個(gè)由百度開源的、用于生成Echarts圖表的類庫,可以用來進(jìn)行數(shù)據(jù)可視化分析。本文將詳細(xì)講解一下Pyecharts的使用,需要的可以參考一下
    2022-04-04
  • python如何保證輸入鍵入數(shù)字的方法

    python如何保證輸入鍵入數(shù)字的方法

    今天小編就為大家分享一篇python如何保證輸入鍵入數(shù)字的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 為什么選擇python編程語言入門黑客攻防 給你幾個(gè)理由!

    為什么選擇python編程語言入門黑客攻防 給你幾個(gè)理由!

    為什么選擇python編程語言入門黑客攻防,小編今天給你幾個(gè)理由!Python語言的優(yōu)點(diǎn)、Python黑客攻擊優(yōu)點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • pandas應(yīng)用實(shí)例之pivot函數(shù)詳解

    pandas應(yīng)用實(shí)例之pivot函數(shù)詳解

    最近在做基于python的數(shù)據(jù)分析工作,引用第三方數(shù)據(jù)分析庫pandas,所以下面這篇文章主要給大家介紹了關(guān)于pandas應(yīng)用實(shí)例之pivot函數(shù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化

    python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化

    在圖像處理中,直方圖是非常重要,也是非常有用的一個(gè)處理要素。這篇文章主要介紹了python數(shù)字圖像處理實(shí)現(xiàn)直方圖與均衡化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例

    這篇文章主要介紹了python采用requests庫模擬登錄和抓取數(shù)據(jù)的簡單示例,代碼簡單卻功能強(qiáng)大!需要的朋友可以參考下
    2014-07-07
  • 全面剖析Python的Django框架中的項(xiàng)目部署技巧

    全面剖析Python的Django框架中的項(xiàng)目部署技巧

    這篇文章主要全面剖析了Python的Django框架的部署技巧,包括Fabric等自動(dòng)化部署和建立單元測試等方面,強(qiáng)烈推薦!需要的朋友可以參考下
    2015-04-04
  • Python中Numpy包的安裝與使用方法簡明教程

    Python中Numpy包的安裝與使用方法簡明教程

    這篇文章主要介紹了Python中Numpy包的安裝與使用方法,結(jié)合簡單實(shí)例形式分析了Python使用pip命令在線與離線whl包安裝,以及使用numpy打印隨機(jī)數(shù)矩陣的操作技巧,需要的朋友可以參考下
    2018-07-07
  • pandas object格式轉(zhuǎn)float64格式的方法

    pandas object格式轉(zhuǎn)float64格式的方法

    下面小編就為大家分享一篇pandas object格式轉(zhuǎn)float64格式的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python中opencv?Canny邊緣檢測

    python中opencv?Canny邊緣檢測

    這篇文章主要介紹了python中opencv?Canny邊緣檢測,Canny邊緣檢測是一種使用多級(jí)邊緣檢測算法檢測邊緣的方法。OpenCV提供了函數(shù)cv2.Canny()實(shí)現(xiàn)Canny邊緣檢測。更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06

最新評(píng)論