該系列教程系個(gè)人原創(chuàng),并完整發(fā)布在個(gè)人官網(wǎng)劉江的博客和教程所有轉(zhuǎn)載本文者,需在頂部顯著位置注明原作者及www.官網(wǎng)地址。題外話: Django的教程寫到這里,就進(jìn)入了整體的第二部分,也是最關(guān)鍵的部分。此時(shí)有一個(gè)問(wèn)題必須想清楚,那就是,以項(xiàng)目帶動(dòng)內(nèi)容還是以參考書目的方式展開(kāi)?為此,我考慮了很久。 我在開(kāi)始學(xué)習(xí)Django的時(shí)候,也看過(guò)許多教程和博客,有的專述某個(gè)細(xì)節(jié),雖然比較深入,但不夠全面;有的比較泛泛但不夠深入。有的以項(xiàng)目帶動(dòng),簡(jiǎn)單易懂,可以跟著一步步做,但做完了,只學(xué)到作者的幾個(gè)小技巧,對(duì)Django仍然是一知半解。都知道用Django的ORM可以方便的操作數(shù)據(jù)庫(kù),但你知道Django有幾種數(shù)據(jù)庫(kù)API么?都知道模板過(guò)濾器很有幫助,但你都用過(guò)么,是不是只會(huì)大小寫轉(zhuǎn)換? 項(xiàng)目實(shí)戰(zhàn)當(dāng)然重要,但是全面完善的內(nèi)容介紹能給你更多的幫助。參考書式的講解,可能比較晦澀,但絕對(duì)是你入門之后,最好的幫手,我們可以時(shí)不時(shí),在需要的情況下,回頭再翻翻,然后恍然大悟,原來(lái)Django本身就有這個(gè)功能,根本不需要自己實(shí)現(xiàn)。畢竟我們學(xué)習(xí)Django不是學(xué)習(xí)如何開(kāi)發(fā)Web框架,而是學(xué)習(xí)Web框架本身提供給你的功能,如果連Django提供的現(xiàn)成功能都不能夠了解齊全,還談什么二次開(kāi)發(fā)? 當(dāng)然,項(xiàng)目實(shí)戰(zhàn)也必須有,但這就是教程的第三部分內(nèi)容了。 基調(diào)已定,那么為了保證內(nèi)容的全面、準(zhǔn)確和權(quán)威性,本部分內(nèi)容以Django官方文檔為依據(jù),加以適當(dāng)調(diào)整和修飾。 以上??! 回到我們的主題--模型層。 在MVC或者說(shuō)MTV設(shè)計(jì)模式中,模型(M)代表對(duì)數(shù)據(jù)庫(kù)的操作。那么如何操作數(shù)據(jù)庫(kù)呢? 手動(dòng)切換到數(shù)據(jù)庫(kù)環(huán)境,然后敲入SQL語(yǔ)句?你知道這是個(gè)笑話! 我們是程序員,講的是自動(dòng)化,實(shí)現(xiàn)的是Python環(huán)境下的操作,所以我們必然是通過(guò)寫Python代碼的方式。可是....Python和數(shù)據(jù)庫(kù)語(yǔ)言SQL是兩碼事啊,它根本操作不了數(shù)據(jù)庫(kù)!沒(méi)關(guān)系,我們可以在Python代碼中嵌入SQL語(yǔ)句,比如下面的方式:
但是問(wèn)題又來(lái)了,Python怎么創(chuàng)建和數(shù)據(jù)庫(kù)的連接呢?或者更直白的說(shuō)Python怎么連接數(shù)據(jù)庫(kù)呢?可以使用類似pymysql這一類的第三方模塊(針對(duì)不同的數(shù)據(jù)庫(kù),有不同的模塊)。于是我們可以進(jìn)行如下的連接:
好了,這樣似乎就Ok了。但是,如果你有很多的數(shù)據(jù)庫(kù)操作,并且你的Python程序員不是專業(yè)的DBA,寫的SQL語(yǔ)句很爛,甚至經(jīng)常寫錯(cuò),怎么辦? 聰明的人想出了一個(gè)辦法:用Python語(yǔ)法來(lái)寫,然后使用一個(gè)中間工具將Python代碼翻譯成原生的SQL語(yǔ)句,這樣你總不會(huì)寫錯(cuò)了吧?這個(gè)中間工具就是所謂的ORM(對(duì)象關(guān)系映射)! ORM將一個(gè)Python的對(duì)象映射為數(shù)據(jù)庫(kù)中的一張關(guān)系表。它將SQL封裝起來(lái),程序員不再需要關(guān)心數(shù)據(jù)庫(kù)的具體操作,只需要專注于自己本身代碼和業(yè)務(wù)邏輯的實(shí)現(xiàn)。 于是,整體的實(shí)現(xiàn)過(guò)程就是:Python代碼,通過(guò)ORM轉(zhuǎn)換成SQL語(yǔ)句,再通過(guò)pymysql去實(shí)際操作數(shù)據(jù)庫(kù)。 最典型的ORM就是SQLAlchemy了,如果你的Web框架自身不帶ORM系統(tǒng),那么你可以安裝使用它,SQLAlchemy使用者還是比較多的,本身功能也比較強(qiáng)大,大家可以自行學(xué)習(xí)。 Django自帶ORM系統(tǒng),不需要額外安裝別的ORM。當(dāng)然,也可以安裝并使用其它的ORM,比如SQLAlchemy,但是不建議這么做,因?yàn)镈jango系統(tǒng)龐大,集成完善,模型層與視圖層、模板層結(jié)合得比較緊密,使用自帶的ORM更方便更可靠,并且Django自帶的ORM功能也非常強(qiáng)大,也不難學(xué)。 Django的ORM系統(tǒng)體現(xiàn)在框架內(nèi)就是模型層。想要理解模型層的概念,關(guān)鍵在于理解用Python代碼的方式來(lái)定義數(shù)據(jù)庫(kù)表的做法!一個(gè)Python的類,就是一個(gè)模型,代表數(shù)據(jù)庫(kù)中的一張數(shù)據(jù)表!Django奉行Python優(yōu)先的原則,一切基于Python代碼的交流,完全封裝SQL內(nèi)部細(xì)節(jié)。 |
|
來(lái)自: 寧?kù)o致遠(yuǎn)oj1kn5 > 《待分類》