2012-11-02 54 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'是低层次的,没有公开记录,除非你真的知道你在做什么,否则你不应该使用它。 –

相关问题