django框架的ORM模型優缺點


1,django中ORM只能通過ForeignKey定義多對一的關系,不能顯式地定義一對多關系;

特別是讀代碼時,第一個類定義完全沒法提示一對多的關系。我必須要看到了第二個類定義,才能搞明白兩個模型之間的關系。真希望有一種顯式說明關系的辦法,降低讀代碼時的認知負擔。

2.聚合:

  django進行聚合查詢的時候,orm在表達對GROUP BY上表示很無奈,只有annotate()和aggressive()這兩種查詢方法,但是對於一些復雜的查詢就很魔幻。

 

3.查詢:

Django在通過一些方法來實現,絕大多數返回的是Django自定義的queryset的迭代器,然而python會對這些作懶惰求值,然而這些方法並不會真正的操作數據庫,

即通過命名方式來控制查詢行為。我看過有的ORM是用lambda的形式來表達WHERE條件,還有的會做一個類似於contains()的方法,都要比Django ORM的方式好看。如果是跨表查詢,Django的方式就更丑了:

Customer.objects.filter(company__name__contains="xxx")

無限的雙下划線啊……

 

總的來說,Django ORM在實現基礎的數據庫操作方面沒問題。但如果需要構建復雜的SQL語句,與其在Django ORM里繞來繞去,還不如直接用原始的SQL語句。這個是我最強烈的一個感受。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM