首頁  >  文章  >  系統教程  >  哪個 Python ORM 在 Django 和 SQLAlchemy 之間更好

哪個 Python ORM 在 Django 和 SQLAlchemy 之間更好

WBOY
WBOY轉載
2024-01-13 20:03:04473瀏覽
什麼是 ORM?

在介紹 Python 的 ORM 框架(Django 和 SQLAlchemy)不同之前,我們先確保完全理解 ORM 框架的用途。

ORM 代表物件關係映射(Object Relational Mapping)。讓我們依序看看這三個單詞,它們正好解釋了 ORM在真實環境中的用處:

● 物件 – 這部分錶示使用框架的物件和程式語言,例如 Python。

● 關係 – 這部分錶示正在使用的 RDBMS (關聯式資料庫管理系統)資料庫。其中包括許多流行的關聯式資料庫,而你可能正在使用以下資料庫 — MSSQL、MySQL、Oracle資料庫、PostgreSQL、MariaDB、PerconaDB、TokuDB。大多數關係資料庫之間的共同點是它們的關係結構(表、列,鍵、約束等)。

● 映射 – 最後這部分錶示前兩部分物件與資料表之間的橋樑和連結。

因此可以得出的結論是 ORM 是為了將程式語言與資料庫之間相連,以便簡化建立依賴資料的應用程式流程。

Django 與 SQLAlchemy 之間比較 活動記錄 vs 資料對應

Django ORM 採用活動記錄實作 — 大多數 ORM 中都能看到此實作。基本上也可以說是資料庫中每一行都直接對應到程式碼中的對象,反之亦然。 ORM 框架(如 Django) 不需要為了在程式碼中使用屬性而預先定義架構,只需要使用它們,因為框架可以透過查看資料庫架構「理解」結構。此外,也可以只儲存記錄到資料庫,因為它也對應到表中的特定行。

SQLAlchemy 採用資料映射實作 — 當使用這種方式實作時,資料庫結構和物件結構之間存在間隙(它們不像活動記錄的實作是 1:1)。大多數情況下,必須使用另外的持久層來保持與資料庫的互動(例如保存物件)。因此當採用活動記錄實現的時候不能只呼叫 save() 方法(反對觀點),但另一方面,程式碼不需要知道資料庫中整個關係結構的運行,因為程式碼和資料庫之間沒有直接關係。

那麼它們之間誰贏了呢?都沒有。這取決於你要實現什麼。我相信如果你的應用程式大多是 CRUD (創建、讀取、更新、刪除)程序,而在不同資料實體之間沒有使用困難且複雜規則,那麼應該採用活動記錄實現(Django)。它將幫助你輕鬆快速地為產品設定 MVP,而不會有任何困難。如果有許多「業務規則」和限制條件,最好採用資料映射模型,因為它不會捆綁並強迫嚴格遵守活動記錄來考慮。

使用複雜查詢

#在某些情況下,Django 和 SQLAlchemy 可以同時使用。現實環境中我多次見到主用例是 Django 用於所有常規 CRUD 操作,而 SQLAlchemy 用於更複雜的查詢,通常是唯讀查詢。

有關這方面更多的資訊和實例,可以看看 BetterWorks 工程部落格(我們沒有任何联系,但不管怎樣,我們喜歡他們的部落格)。

主鍵自動產生

#兩個框架之間的另一個不同之處是 Django 能為表自動建立主鍵, SQLAlchemy 卻做不到。必須手動為每張表建立主鍵。權衡利弊 — 你認為哪一種框架最清楚符合表的主鍵?根據團隊的知識和經驗,可以自行決定。

自動提交

預設情況下,Django 會自動提交, SQLAlchemy 卻不行。自動提交會影響使用框架的方式(交易、回溯等)。

支援的資料庫

#Django 和 SQLAlchemy 都能用於 MySQL、PostgreSQL、Oracle 和 SQLite。如果你正在使用 MSSQL,則應該使用 SQLAlchemy,因為它完全支援 MSSQL ,也可以找到更多相關的資訊和文件。

學習曲線

在網路上有一個普遍的觀點,認為 Django 更容易學習。這是顯而易見的,由於它通常都用在沒有特別複雜的用例上。因此,應該考慮願意投入多少精力來學習框架,與 SQLAlchemy 交叉學習以獲得更多的靈活性(假使你真的需要它)。

社群規模

毫無疑問,在 Python ORM 框架中 SQLAlchemy 擁有最大的社群。如果社群對你至關重要(我認為它應該是),SQLAlchemy 就是你的選擇。這並不說明對於其它框架,你不能找到任何幫助,例如 Django。你也可以獲得 bug 修復,從 StackOverflow 得到問題的答案和其它需要的幫助,但機率只比 SQLAlchemy 高。

效能

我認為只在這裡寫(X 比 Y 快)是不負責任的。由於 ORM 具有如此多特徵和功能,並且它們在每個框架中也不同,這將很難得出結論。根據我的經驗,使用框架特性的方式,會對應用程式中資料層的整體效能產生極大影響。因此我建議不要透過性能來選擇框架,而是應該學習如何合理地利用框架。

假如在 ORM 框架中使用原始的 SQL 查詢、使用 Jooq 或只是部分查詢不使用 ORM,可以了解 EverSQL 查詢最佳化器,這可能是最簡單優化任何查詢的方法。

總結

任何比較中,我認為最好把決策權交還給讀者。每個用例之間是不同的,不同的技術也可以更適用。看看上面指出的差異,讓我們知道你做了什麼決定。

以上是哪個 Python ORM 在 Django 和 SQLAlchemy 之間更好的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除