Python 导入数据库和导入数据存储之间有什么区别

Python 导入数据库和导入数据存储之间有什么区别,python,google-app-engine,Python,Google App Engine,导入数据库和导入数据存储之间有什么区别 from google.appengine.ext import db # ore from google.appengine.api import datastore 我试图了解如何从cccwiki中的页面获取名称: class WikiPage(BaseRequestHandler): def index(name): # Loads the pages as index links with the given name.

导入数据库和导入数据存储之间有什么区别

from google.appengine.ext import db
# ore
from google.appengine.api import datastore
我试图了解如何从cccwiki中的页面获取名称:

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)

他们是完全不同的动物

  • 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\u列表
结果集中的每个条目都是一个字典,其内容取决于首先在记录中存储内容的代码。对于
cccwiki
代码,我希望看到
内容
用户
创建的
修改的

如果您确实有一个使用
google.appengine.ext.db
API定义的
Page
类,则使用该类来查询您的页面:

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

然后您可以访问结果的属性。

它们完全不同

  • 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\u列表
结果集中的每个条目都是一个字典,其内容取决于首先在记录中存储内容的代码。对于
cccwiki
代码,我希望看到
内容
用户
创建的
修改的

如果您确实有一个使用
google.appengine.ext.db
API定义的
Page
类,则使用该类来查询您的页面:

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

然后您可以访问结果的属性。

tl;dr:
api.datastore
是低级的,没有公开的文档,除非你真的知道自己在做什么,否则不应该使用它;dr:
api.datastore
是低级的,没有公开的文档,除非你真的知道自己在做什么,否则不应该使用它。