概览
具备可伸缩性的
GAE
数据存储中,能够存储和查询的数据对象,称之为
实体:
entities.
一个
entity
有一个或多个属性,表示所支持的几种支持的数据类型的一种值。属性还可以关联到其它
entity
,创建一对多或者多对多的关系。
GAE
数据存储能在一个事务当中进行多个操作,并且可以在失败后回滚。在分布式的
Web
应用程序中这尤其重要。因为可能有多个用户同时读取和操作同样的数据。在多个用户都在改变数据时,
GAE
数据存储尝试重新执行事务。
和传统的数据库不一样,
GAE
数据存储利用分布式的结构以存储海量数据。一个
GAE
应用程序可以能够通过定义关联,查询索引来优化数据的分布式存储。
GAE
数据存储并不是关系数据库。在提供与传统数据库的相似
介面
的同时,利用它本身具备了可伸缩性的能力,提供了另外的方法来管理和设计数据库。
GAE
数据存储
API
用一种别具特色的机制定义数据模型。一个模型描述了一种
实体:
entity
,包括多个属性的类型和配置。应用程序利用
python
类来定义模型,类的
attributes
描述属性。一种类型的
entity
对应了一个模型类的对象实例。实例的
python attributes
则对应了属性值。一个
entity
可以用类的构造函数创建,并通过调用
put()
方法之后保存到服务器。
from google.appengine.ext import db
from google.appengine.api import users
classPet(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()
GAE
数据存储提供了
2
种查询方式介面:一种是查询对象的介面,一种是类
SQL
的语言:
GQL
。一个查询返回了多个
entitiy
,放在对应的类模型的实例里面。可以修改,并返回到存储服务器。
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)