如何理解python的sqlalchemy這種orm框架?


回答這個問題之前,首先讓我們回顧一下,一個關係資料庫中都有什麼?沒錯,簡單來說,就是一張張表。表中又有什麼?行和列,一行就是一條記錄,一列就代表著一條記錄的某個屬性。舉例來說,一個學籍資料庫可能包含一張學生信息表,表中每行記錄著一個學生的信息,由很多列組成,每一列表示學生的一個屬性,比如姓名、年齡、入學時間……

有沒有覺得和python中的類、實例對象以及成員屬性的概念有某種映射關係呢?哈,沒錯,orm其實就是把表映射成了類,它包含一些成員屬性,相當於一個模板,通過這個模板,我們給相應的屬性填上一個值,可以創建一個實例對象也就是一條記錄。然後把常用的一些SQL操作封裝成對應的方法,比如select封裝為get方法,這樣就實現了一個orm。

當然,如果要自己寫一個orm,技術層面上,你還需要去理解什麼是元類、如何使用元類,以及一些有關描述器的知識。

手機黨,不方便打字,就說這些了。更多的內容,題主可以自行google,也可以在github上找一些其他人實現的輕量級orm看一看


先通讀文檔,再重寫示例,最後閱讀源碼。就是這樣理解。

如果你只把自己限定在做一點一個人用的博客之類的地方,那麼直接上手看 ORM 文檔照著範例寫「20分鐘博客、30分鐘wiki之類的crud類代碼」即可。從使用的角度來說,你能做到的無非就是儘可能利用 ORM API 提供的功能,實現你的業務需求。

但如果你真的需要實現足夠複雜、足夠高性能的系統,你必須熟悉 SQL 。

一個頁面里,

Students.objects.filter(name__first_name__iexact="asdf")

這樣一個調用的代價到底有多少,一個頁面里這樣的調用有多少,你不熟悉 SQL 很難得到一個直觀的概念。

另一個可能是,ORM 系統可能沒有考慮到你需要的複雜情況,比如複雜的帶有限定的連接。這種時候你必須手寫 SQL。


推薦閱讀:

TAG:Python | SQLAlchemy | Python框架 | ORM |