概述
gae的可扩展性数据库存储并执行对数据对象的查询操作,这些数据对象被称为entities(实体?)。一个entity可以有一个或者多个properties(字段?),命名为支持的数据类型的其中一种的值。一个properties可以被其他entities所参考,来建立一对多或者多对多的关系。
数据库可以针对同一种事务处理进行多样的操作,并且在任何操作失败的情况下可以回滚entities的事务处理。这对于分布式web应用是非常有用的,多个用户同时访问或者操作同一数据对象的时候,数据库可以在这些用户都对数据做了改变的情况下多次重试事务处理。
和传统的数据库不同,GAE的数据库采用分布式的结构来管理庞大的数据集合。一个GAE应用可以根据数据对象之间的关系描述和定义查询索引来优化哪些数据采用分布式。
GAE数据库不是一个关系数据库。尽管数据库的接口有许多特征跟关系数据库相同,GAE数据库的独特的特征蕴含着一种不同的设计和管理数据的方法来利用自动扩展的能力
------------------------------------------------------------------------------------
GAE数据库的特征是一种定义数据模型的机制。一个模型描述一种entities,包括类型和结构来作为他的properties。一个应用使用python的类来定义模型,使用类的属性来描述properties。Entities的一种表示方法是使用与其相一致的的模型类的对象,使用对象的属性来表示 property 的值。一个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()
数据库API提供两个查询接口:一个query对象接口,和一个SQL-like(像SQL一样)的查询语言,叫GQL。一个查询可以以模型类的对象的形势来返回entities,并且可以修改并且放回到数据模块中。
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)
谢谢胖哥在翻译过程中对我的帮助,目前网上似乎还没有对GAE文档的完整翻译,小弟的英文能力实在有限,小弟希望能发起大家一同来完成对GAE文档的翻译,请加入AppEngine 小组并站内PM我或者email我 ekea0407@sina.com
【本文翻译仅为外语学习及阅读目的,原文作者个人观点与译者及译言网无关】