GAE SDK 1.6.5版发布
2012 4 25 01:31 PM 2059次查看
分类:Google App Engine 标签:Google App Engine
- 实验性地支持projection queries(投射查询)。
它的意思是以前只能查询实体的所有属性,即SELECT * FROM ...,而使用投射查询则可以查询部分属性,例如SELECT A, B FROM ...。
这种查询只会访问索引(不访问实体本身),因此性能与keys only的查询相当,但会有下述限制:- 只能查询索引过的属性。当想通过文章标题查询文章内容时,如果内容为TEXT类型,自然就不能查询了。
- 不能查询用等号修饰的属性,即SELECT A FROM kind WHERE A = 1(因为结果肯定是1)。但SELECT B FROM kind WHERE A = 1或SELECT A FROM kind WHERE A > 1是可以的。
- 不能在一个查询里投射2次相同属性,即SELECT A, A FROM ...。
- 因为返回的实体是不完整的,所以不能保存回datastore。
例如我要查询本站某篇文章的发布时间:
这里要注意的是,这个查询需要定义一条复合索引:class Article(db.Model): title = db.StringProperty(required=True) time = db.DateTimeProperty(auto_now_add=True) # others... article = db.GqlQuery(u"SELECT time FROM Article WHERE title = 'GAE SDK 1.6.4版发布'").get() print article.time article = db.Query(Article, projection=('time',)).filter('title =', u'GAE SDK 1.6.4版发布').get() print article.time article = Article.all().filter('title =', u'GAE SDK 1.6.4版发布').get(projection=('time',)) print article.time article = Article.all().filter('title =', u'GAE SDK 1.6.4版发布').fetch(1, projection=('time',)) print article[0].time
这种查询是不能使用merge join的,所以只要涉及到多个属性,几乎都需要复合索引。例如查询id为1的文章标题:- kind: Article properties: - name: title - name: time
也需要一条:article = db.Query(Article, projection=('title',)).filter('__key__ =', db.Key.from_path('Article', 1)).get()
虽然title的内置索引里就有__key__,但顺序是不同的,也就不能复用。- kind: Article properties: - name: __key__ - name: title
- 只能查询索引过的属性。当想通过文章标题查询文章内容时,如果内容为TEXT类型,自然就不能查询了。
- 在High Replication Datastore里,实体会有个__entity_group__元数据,用于标识实体组的版本。每次修改时,版本号都会递增。
- Images API可以访问Google Cloud Storage里存储的图像元素。
- Images API的get_serving_url()函数可以指定secure_url=True参数,这样生成的图片可以通过HTTPS访问。
- Task Queue REST API可以在向Pull Queue插入任务时指定tag。
- Task Queue API可以指定lease_tasks的超时时间。默认的超时时间从5秒延长到10秒。
- 可以使用计划任务来备份datastore。
- Datastore Admin现可显示备份还原信息。
- 可在Datastore Admin里中止显示备份。
- 可以还原Datastore备份里的单一kind。
- 在管理员控制台里增加“Report Production Issue”链接,如果你的应用出了什么问题,可以点击提交。
- 用户请求头增加X-AppEngine-Region、X-AppEngine-City和X-AppEngine-CityLatLong,可以基于用户IP来获知地理位置(以前仅精确到国家)。
- 可以在app.yaml里设定os.environ环境变量,例如:
env_variables: DJANGO_SETTINGS_MODULE: 'myapp.settings'
向下滚动可载入更多评论,或者点这里禁止自动加载。