2010-04-29 74 views
46

我一直在與Mongo交互時使用哪種Python API。我對景觀進行了快速調查,確定了三位主要候選人。哪個Python API應與Mongo DB和Django一起使用

如果您正在使用的django框架,你會選擇什麼樣的API,爲什麼設計新的內容較多的網站?

MongoEngine看起來像它是專門用Django構建的。 PyMongo似乎是Mongo周圍的薄包裝。它有很多的力量,但是失去了很多通過使用django作爲框架獲得的抽象。明代表PyMongo和MongoEngine之間的一個有趣的中間地帶,儘管我沒有機會參加試駕。

回答

55

正如邁克說,你無法避免PyMongo - 其他所有的接口建立在它之上。這些其他接口可以說是不必要的。諸如在Django中使用的ORM在處理SQL時很有用,因爲它們減輕了創建SQL查詢和模式的複雜性,並將結果集解析爲對象。

PyMongo不過已經有了 - 查詢經過一個方便簡單的API,來自MongoDB的結果已經是對象了(根據定義,Python中的字典 - 相同的差異)。如果你覺得你真的需要用Python對象來裝飾你的Mongo文檔,那麼很容易在PyMongo中添加一個SON操縱器。這種方法的好處在於,您可以直接在PyMongo上編寫代碼,以後再添加其他功能,而無需在代碼和PyMongo之間插入新的API。

還剩什麼?模式創建和遷移在某種程度上是有用的,但幾乎就像臨時做的那樣 - 如果你正在考慮使用MongoDB,你希望擺脫傳統的SQL風格模型。另外,如果完全兼容Django的MongoDB ORM,你可能會獲得一些里程碑。任何不足之處,你可能會爲自己創造工作。

你不會後悔直接使用PyMongo。值得關注的,如果你有興趣在最高效率

最後一個選項是PyMongo的異步版本,在這裏:http://github.com/fiorix/mongo-async-python-driver

+2

您對異步(扭曲)驅動程序有任何親身經歷嗎?我想在一個Twisted應用中使用MongoDB並且遇到它,但PyMongo文檔指出[http://api.mongodb.org/python/current/faq.html?highlight=twisted#how-can-i-use -pymongo-with-an-asynchronous-socket-library-like-twisted](_這個項目目前比PyMongo_不穩定)。這可能只是一個關於第三方開源項目的標準聲明,但它也可能是真實的......這就是爲什麼我在尋找關於此庫的第一手評論... – 2012-01-10 00:34:16

+1

這裏是異步驅動程序的作者。據說它不夠穩定,因爲PyMongo並不是最新的版本,由MongoDB(同一家公司)維護。我很久以前使用[官方文檔](http://docs.mongodb.org/meta-driver/latest/legacy/mongodb-wire-protocol/)編寫了異步驅動程序,並且驅動程序已經由許多貢獻者發展了很多包括爲MongoDB工作的人員。它實際上是穩定的,適合生產。 – fiorix 2014-05-27 03:27:20

6

MongoEngine和Ming都依賴於PyMongo--它們只是把一些很好的功能放在上面。我建議至少直接啓動w/PyMongo - 如果您決定使用其他工具之一併遇到問題,將很容易理解「底層」中發生了什麼。這就是說,我非常有偏見;)。

11

我一直在使用Mongokit。就目前而言。

這裏有一個blog post I referenced when integrating with Django

+0

感謝提及Mongokit,哈羅德。我沒有聽說過它,並會有興趣地關注它的發展。 – Thomas 2010-05-03 20:22:52

+0

+1爲MongoKit,作者是非常容易到達,並已大大提高性能的大衆需求。 – 2010-06-01 19:38:31

0

官方Mongodb documentation談到djongo。它通過將SQL查詢轉換爲mongodb查詢來工作。

你不需要django-nonrel來運行它。

所有本機的Django contrib模塊(例如admin,user,session)都可以不加修改地工作。

MongoEngine需要重寫contrib模塊,最後我檢查了本機管理模塊沒有在MongoEngine上運行。

您的現有模型在沒有任何ORM轉換的情況下運行。