ORM MVC、模板引擎介绍(建议收藏)
ORM
- ORM
- 一、什么是ORM
- 二、認(rèn)知 ORM
- 三、數(shù)據(jù)庫(kù)和對(duì)象的映射關(guān)系
- 四、優(yōu)缺點(diǎn)
- 五、常用的 ORM 庫(kù)
- MVC
- 什么是MVC
- 模板引擎
ORM
一、什么是ORM
ORM是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_發(fā)方法是
當(dāng)今企業(yè)級(jí)應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法,關(guān)系型數(shù)據(jù)庫(kù)是企業(yè)級(jí)應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng)。
對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫(kù)中,關(guān)系數(shù)據(jù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。
因此,ORM系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。ORM與數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系如圖5.2所示。
二、認(rèn)知 ORM
對(duì)象關(guān)系映射(Object Relational Mapping,ORM)是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說(shuō),它其實(shí)是創(chuàng)建了一個(gè)可在編程語(yǔ)言里使用的“虛擬對(duì)象數(shù)據(jù)庫(kù)”。
面向?qū)ο笫窃谲浖こ痰幕驹瓌t(如耦合、聚合、封裝)基礎(chǔ)上發(fā)展起來(lái)的,而關(guān)系數(shù)據(jù)庫(kù)則是從數(shù)學(xué)理論發(fā)展而來(lái)的,兩套理論存在顯著的區(qū)別。為了解決這個(gè)不匹配問(wèn)題,ORM技術(shù)應(yīng)運(yùn)而生。
三、數(shù)據(jù)庫(kù)和對(duì)象的映射關(guān)系
- 數(shù)據(jù)表(table)----> 類(class)
- 數(shù)據(jù)行(record,也稱為記錄)----> 對(duì)象(object)
- 字段(field)----> 對(duì)象的屬性(attribute)
舉個(gè)例子:
下面是SQL語(yǔ)句:
寫成ORM
data = Book.query.all()四、優(yōu)缺點(diǎn)
.優(yōu)勢(shì)
第一:隱藏了數(shù)據(jù)訪問(wèn)細(xì)節(jié),“封閉”的通用數(shù)據(jù)庫(kù)交互,ORM的核心。他使得我們的通用數(shù)據(jù)庫(kù)交互變得簡(jiǎn)單易行,并且完全不用考慮該死的SQL語(yǔ)句。快速開發(fā),由此而來(lái)。第二:ORM使我們構(gòu)造固化數(shù)據(jù)結(jié)構(gòu)變得簡(jiǎn)單易行。在ORM年表的史前時(shí)代,我們需要將我們的對(duì)象模型轉(zhuǎn)化為一條一條的SQL語(yǔ)句,通過(guò)直連或是DB helper在關(guān)系數(shù)據(jù)庫(kù)構(gòu)造我們的數(shù)據(jù)庫(kù)體系。而現(xiàn)在,基本上所有的ORM框架都提供了通過(guò)對(duì)象模型構(gòu)造關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能。這,相當(dāng)不錯(cuò)。缺點(diǎn)
第一:無(wú)可避免的,自動(dòng)化意味著映射和關(guān)聯(lián)管理,代價(jià)是犧牲性能(早期,這是所有不喜歡ORM人的共同點(diǎn))。現(xiàn)在的各種ORM框架都在嘗試使用各種方法來(lái)減輕這塊(LazyLoad,Cache),效果還是很顯著的。第二:面向?qū)ο蟮牟樵冋Z(yǔ)言(X-QL)作為一種數(shù)據(jù)庫(kù)與對(duì)象之間的過(guò)渡,雖然隱藏了數(shù)據(jù)層面的業(yè)務(wù)抽象,但并不能完全的屏蔽掉數(shù)據(jù)庫(kù)層的設(shè)計(jì),并且無(wú)疑將增加學(xué)習(xí)成本.第三:對(duì)于復(fù)雜查詢,ORM仍然力不從心。雖然可以實(shí)現(xiàn),但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。五、常用的 ORM 庫(kù)
Python中提供了非常多的ORM庫(kù),一些ORM庫(kù)是框架特有的,還有一些是通用的第三方包。雖然每個(gè)ORM庫(kù)的應(yīng)用領(lǐng)域稍有不同,但是它們操作數(shù)據(jù)庫(kù)的理論原理是相同的。
下面列舉了一下常用的Python ORM框架。
- Django ORM:Django是一個(gè)免費(fèi)、開源的應(yīng)用程序框架,它的ORM是框架內(nèi)置的。由于Django的ORM和框架本身結(jié)合太緊密了,所以不推薦脫離Django框架使用它。
- SQLAlchemy:一個(gè)成熟的ORM框架,資源和文檔都非常豐富,大多數(shù)Python Web框架對(duì)其都有很好的支持,能夠勝任大多數(shù)應(yīng)用場(chǎng)合。
- Peewee:一個(gè)輕量級(jí)的ORM。Peewee基于SQLAlchemy內(nèi)核開發(fā),整個(gè)框架由一個(gè)文件構(gòu)成。Peewee更關(guān)注極簡(jiǎn)主義,具備簡(jiǎn)單的API以及容易理解和使用的函數(shù)庫(kù)。
- Storm:一個(gè)中型的ORM庫(kù)。它允許開發(fā)者跨數(shù)據(jù)庫(kù)構(gòu)建復(fù)雜的查詢語(yǔ)句,從而支持動(dòng)態(tài)地存儲(chǔ)或檢索信息。
MVC
什么是MVC
MVC 模式(Model–view–controller)是軟件工程中的一種軟件架構(gòu)模式,它把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。
MVC 模式的目的是實(shí)現(xiàn)一種動(dòng)態(tài)的程序設(shè)計(jì),簡(jiǎn)化后續(xù)對(duì)程序的修改和擴(kuò)展,并且使程序某一部分的重復(fù)利用成為可能。除此之外,MVC 模式通過(guò)對(duì)復(fù)雜度的簡(jiǎn)化,使程序的結(jié)構(gòu)更加直觀。軟件系統(tǒng)在分離了自身的基本部分的同時(shí),也賦予了各個(gè)基本部分應(yīng)有的功能。專業(yè)人員可以通過(guò)自身的專長(zhǎng)進(jìn)行相關(guān)的分組:
- 模型(Model):程序員編寫程序應(yīng)有的功能(實(shí)現(xiàn)算法等等)、數(shù)據(jù)庫(kù)專家進(jìn)行數(shù)據(jù)管理和數(shù)據(jù)庫(kù)設(shè)計(jì)(可以實(shí)現(xiàn)具體的功能);
- 控制器(Controller):負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理;
- 視圖(View):界面設(shè)計(jì)人員進(jìn)行圖形界面設(shè)計(jì)。
MVC模式中三個(gè)組件的詳細(xì)介紹如下:
模型(Model):用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。“Model”有對(duì)數(shù)據(jù)直接訪問(wèn)的權(quán)力,例如對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。“Model”不依賴“View”和“Controller”,也就是說(shuō), Model 不關(guān)心它會(huì)被如何顯示或是如何被操作。但是 Model 中數(shù)據(jù)的變化一般會(huì)通過(guò)一種刷新機(jī)制被公布。為了實(shí)現(xiàn)這種機(jī)制,那些用于監(jiān)視此 Model 的 View 必須事先在此 Model 上注冊(cè),由此,View 可以了解在數(shù)據(jù) Model 上發(fā)生的改變。(比如:觀察者模式(軟件設(shè)計(jì)模式));
視圖(View):能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示(理論上,這不是必需的)。在 View 中一般沒(méi)有程序上的邏輯。為了實(shí)現(xiàn) View 上的刷新功能,View 需要訪問(wèn)它監(jiān)視的數(shù)據(jù)模型(Model),因此應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里注冊(cè);
控制器(Controller):起到不同層面間的組織作用,用于控制應(yīng)用程序的流程。它處理事件并作出響應(yīng)。“事件”包括用戶的行為和數(shù)據(jù) Model 上的改變。
從MVC模式的一般理解來(lái)看,視圖層與模型層是存在直接聯(lián)系的,并且模型層的變化會(huì)通過(guò)視圖層反映出來(lái),這確實(shí)是MVC模式的標(biāo)準(zhǔn)理解,不過(guò)在我目前接觸到的實(shí)際應(yīng)用中,更多的情況時(shí),視圖層與模型層是通過(guò)控制層聯(lián)系起來(lái)的,兩者之間并無(wú)直接的聯(lián)系,三者之間的關(guān)系更類似下圖所示:
模板引擎
了解模板引擎:模板引擎(用于Web開發(fā))是為了使用戶界面與業(yè)務(wù)數(shù)據(jù)(內(nèi)容)分離而產(chǎn)生的,它可以生成特定格式的文檔,用于網(wǎng)站的模板引擎就會(huì)生成一個(gè)標(biāo)準(zhǔn)的HTML文檔。
總結(jié)
以上是生活随笔為你收集整理的ORM MVC、模板引擎介绍(建议收藏)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FastAPI ------框架基础
- 下一篇: pymsql 与 SQLAlchemy