2012-11-02 59 views
0

是什麼是什麼進口DB和進口數據存儲之間的區別

from google.appengine.ext import db 
# ore 
from google.appengine.api import datastore 

我試圖瞭解如何從一個頁面中cccwiki得到名稱進口DB和進口數據存儲之間的區別:

class WikiPage(BaseRequestHandler): 

    def index(name): 
     # Loads the pages as index links with the given name. 

     query = datastore.Query('Page') 
     query['name ='] = name 
     entities_list = query.Get(100) 

回答

3

它們完全不同。

  • google.appengine.api.datastore是數據存儲訪問API。它類似於SQL數據庫的數據庫驅動程序。它可讓您連接到數據存儲並運行查詢。

  • google.appengine.ext.db是一個數據建模API。它可以讓您對要存儲在數據存儲中的數據進行建模。它類似於SQLAlchemy和Django的數據建模層。它可以讓您在應用程序中表達所需的數據,從而可以輕鬆地將操作轉換爲查詢到數據存儲區。

換句話說,與google.appengine.ext.db創建模型,和操縱在模型(添加和刪除的實體,改變這些實體的屬性)導致查詢到底層數據存儲,使用google.appengine.api.datastore。您的WikiPage代碼不使用模型;它直接查詢數據存儲。我相信cccwiki確實有它自己的Page類,你可以創建這些與name參數和數據從查詢返回:

page = Page(name, entities_list[0]) 

entities_list結果集的每個條目是一本字典在任何情況下,並且內容取決於首先將記錄中的東西存儲在中的代碼。在cccwiki代碼的情況下,我期望看到content,user,createdmodified密鑰。

如果有使用google.appengine.ext.db API定義的Page類,然後用它來查詢您的頁面,而不是:

q = Page.all() 
q.filter('name = ', name) 
page = q.get() 

然後你就可以訪問結果的屬性。

+1

tl; dr:'api.datastore'是低層次的,沒有公開記錄,除非你真的知道你在做什麼,否則你不應該使用它。 –

相關問題