1

在新加坡,我们正在使用 Singpath ( singpath.appspot.com ) 教学生 Python。除了让学生练习用python编写软件外,我们还想让学生熟悉用于访问大表的google.appengine.ext.db API。

在 App Engine 应用程序中修改 db.Model 设置以便任何 put 或 get 访问本地临时数据存储而不是写入大表的最简单方法是什么?我正在尝试做一些类似于 gaeunit 每次运行单元测试时如何创建一个新的临时数据存储的事情。

from google.appengine.ext import db
import logging

class MyModel(db.Model):
  name = db.StringProperty()

#Configure a temp datastore to be updated instead of bigtable. 

m = MyModel()
m.put() #shouldn't update bigtable
result = MyModel.all() #should fetch from temp datastore

logging.info("There were %s models saved", result.count())
4

1 回答 1

2

您当然可以在开发服务器中通过在需要时创建新的存根数据存储来执行此操作,例如 gaeunit。不过,我认为这个概念并没有真正转移到生产环境中。临时数据存储必须有某种后备存储,要么是真实的数据存储,要么是内存缓存。AFAIK 两者都没有内置支持。

另一种方法是使用带有一些沙盒的真实数据存储。

您可以覆盖 db.Model.kind 为会话 ID 添加前缀:

@classmethod
def kind(cls):
  return "%s_%s" % (SESSION_ID, cls.__name__)

这将为您提供用户创建实体的基本命名空间。

如果您有一个会话实体,您可以将其填充为任何尚未指定的查询的父实体。这将强制您的所有用户实体进入一个实体组。

无论哪种情况,在会话开始时,您都可以安排稍后运行的任务来清理用户创建的实体。

于 2010-07-10T20:37:42.390 回答