©2009 Google -
Code 主页 -
站点服务条款 -
隐私政策 -
站点目录
Google Code 有以下版本:
English -
Español -
日本語 -
한국어 -
Português -
Pусский -
中文(简体) -
中文(繁體)
App Engine 可扩展数据库在数据对象(称为实体)上存储和执行查询。实体有一个或多个属性(若干个支持的数据类型中某一个类型的命名的值)。属性可以是对其他实体的引用,以创建一对多或多对多关系。
数据库可以在一个事务中执行多种操作,如果操作失败则回滚整个事务。这对于分布式网络应用程序尤其有用,在这种分布式网络应用中多个用户可能同时访问或处理同一数据对象。如果多个用户同时进行更改,数据库会多次重试事务。
与传统数据库不同,该数据库使用分布式架构管理扩展为大型数据集。App Engine 应用程序可以通过描述数据对象之间的关系,以及定义查询的索引,来优化数据的分布方式。
该 App Engine 数据库不是关系数据库。虽然数据库接口有许多与传统数据库相同的功能,但数据库的独特特征采用不同的方式设计和管理数据,以便利用自动扩展功能。
数据库 API 拥有一个用于定义数据模型的机制。Model 描述实体的类型,包括其属性的类型和配置。应用程序使用 Python 类定义 Model,其中 Model 属性描述了属性。某个类型的实体由对应 Model 类的实例表示,其中实例属性则代表属性值。可以通过调用类的构造函数创建实体,然后通过调用 put() 方法进行存储。
from google.appengine.ext import db
from google.appengine.api import users
class Pet(db.Model):
name = db.StringProperty(required=True)
type = db.StringProperty(required=True, choices=set(["cat", "dog", "bird"]))
birthdate = db.DateProperty()
weight_in_pounds = db.IntegerProperty()
spayed_or_neutered = db.BooleanProperty()
owner = db.UserProperty()
pet = Pet(name="Fluffy",
type="cat",
owner=users.get_current_user())
pet.weight_in_pounds = 24
pet.put()
数据库 API 提供两种用于查询的接口:查询对象接口和类似于 SQL 的查询接口(名为 GQL)。查询以 Model 类的实例的形式返回实体,这些 Model 类可以被修改并放回到数据库中。
if users.get_current_user():
user_pets = db.GqlQuery("SELECT * FROM Pet WHERE pet.owner = :1",
users.get_current_user())
for pet in user_pets:
pet.spayed_or_neutered = True
db.put(user_pets)