Python的ORM選擇之Pony還是SQLAlchemy?

編程本身就是對數(shù)據(jù)的處理。ORM是學(xué)習(xí)開發(fā)繞不過去的坎兒,今天我們就來聊聊在python的orm框架中,面對Pony和Sqlalchemy該如何選擇。我最早學(xué)習(xí)的框架是django,那時候還是1.x系列主流。感覺django和它的orm的設(shè)計理念非常nice,但問題也很明顯:深度綁定,單獨使用很難。后來逐漸接觸到其他的orm框架,比如 peewee,pony, sqlalchemy.其中,能夠提供和django同樣豐富功能的目前看來只有sqlalchemy,幾乎你能想到的它都準(zhǔn)備好了或者只需要簡單的封裝就能實現(xiàn)。django的orm和sqlalchemy都是相對重型的orm框架。你可以把sqlalchemy看作能獨立使用django的orm也可以。peewee和pony都是相對輕型的ORM框架。
????我自己的orm的學(xué)習(xí)路線是 django-orm-->sqlalchemy -->?peewee-->?pony-->pony + sqlalchemy.目前是sqlalchemy和pony并用,根據(jù)開發(fā)場景做選擇。這中間四次轉(zhuǎn)向?qū)W習(xí)的動機如下:
從django-rom到sqlalchemy: 尋找一款無需和django綁定的django-orm的替代品。
從sqlalchemy 到 peewee :?sqlalchemy 太繁瑣了。想少敲一些代碼。我需要一款sqlalchemy的輕量化替代品。
從peewee到pony:?peewee的設(shè)計有一些我不喜歡的地方,特別是在復(fù)雜的關(guān)系表上的。而且我厭倦了無窮盡的重復(fù)學(xué)習(xí)。我需要一款學(xué)習(xí)成本低輕量級ORM框架。
pony +?sqlalchemy 雙持: 相對sqlalchemy 的傳統(tǒng)設(shè)計思維,pony里面太多黑魔法了,在嵌入復(fù)雜異步框架,打包編譯和跨語言調(diào)用上容易出現(xiàn)兼容性問題。因此,在這些場景下,還是需要sqlalchemy 這個老大哥出來坐鎮(zhèn)。
四款orm我只有在pony和sqlchemy上面比較有經(jīng)驗,而前者比后者大概又多了5-6年的生產(chǎn)經(jīng)驗。所以我現(xiàn)在只能拿pony和sqlchemy做做比較
1. 學(xué)習(xí)成本
pony的優(yōu)勢非常明顯,需要的學(xué)習(xí)時間一般不到?sqlchemy 的十分之一,很多python方面有經(jīng)驗的人,可以在幾個小時內(nèi)完全熟練的使用。可以說目前能在生產(chǎn)環(huán)境大規(guī)模使用的orm里,pony是學(xué)習(xí)成本最低的框架。
2. 功能
在提供能的功能方面,2者相當(dāng),sqlchemy以微弱的優(yōu)勢領(lǐng)先,雖然 pony 功能比?sqlchemy 少,但某些功能的裁剪其實是刻意為之,比如pony沒有專門的批量修改的函數(shù)。你需要用其他的方法(比如直接調(diào)用sql)來實現(xiàn)。按照設(shè)計者的說法是:如果你需要頻繁的批量的修改和刪除操作,考慮一下你的數(shù)據(jù)模型設(shè)計上出了什么問題吧....不過也有持反對意見的,畢竟pony現(xiàn)在不再是商業(yè)化的pony,而是一個開源的產(chǎn)品,需要聽取社區(qū)的意見。
3.性能
理論上orm的性能和3個東西有關(guān):
驅(qū)動的性能
orm的對sql語句的生成和優(yōu)化
使用者的技術(shù)
對于第一點,大家都一樣,使用的驅(qū)動直接決定了性能。
對于第二點,大家?guī)缀醵家粯?,畢竟都是成熟的產(chǎn)品,說到底都是sql語句的生成和執(zhí)行。玩不出來什么花頭。
第三點才是關(guān)鍵。你的水平如何,直接決定了最終表現(xiàn)出來的性能。
寫在結(jié)束
如果是新手,我會建議以pony開始。學(xué)習(xí)成本低,挫敗感少,幾乎不用學(xué)習(xí)新語法。
如果有一定經(jīng)驗且想提高開發(fā)效率的web開發(fā)者, 你可以試試pony,或許會讓你感到驚喜
如果你是一個qt開發(fā)者,我建議你選擇?sqlchemy , 這樣你會在打包成exe文件時少遇到很多問題。