Python 需要在Google App Engine中查找表的模式

Python 需要在Google App Engine中查找表的模式,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我正在使用Python版本的Google应用程序引擎和数据存储。加载包含查找数据的表的好方法是什么? 通过查找数据,我的意思是在初始加载之后,不需要插入、删除或更新任何行 如果清除所有行并重新加载表破坏了其他行引用它的引用完整性,则不可接受 下面是我正在使用的两种类型的示例,我希望将查找数据加载到其中 class Badge(db.Model): name = db.StringProperty() level = db.IntegerProperty() class Achi

我正在使用Python版本的Google应用程序引擎和数据存储。加载包含查找数据的表的好方法是什么?

通过查找数据,我的意思是在初始加载之后,不需要插入、删除或更新任何行

如果清除所有行并重新加载表破坏了其他行引用它的引用完整性,则不可接受

下面是我正在使用的两种类型的示例,我希望将查找数据加载到其中

class Badge(db.Model): name = db.StringProperty() level = db.IntegerProperty() class Achievement(db.Model): name = db.StringProperty() level = db.IntegerProperty() badge = db.ReferenceProperty(reference_class=Badge) 班级徽章(db.Model): name=db.StringProperty() 级别=db.IntegerProperty() 班级成绩(db.Model): name=db.StringProperty() 级别=db.IntegerProperty() badge=db.ReferenceProperty(参考类=badge) 下面是一个不保存查找数据但引用它的示例

class CamperAchievement(db.Model): camper = db.ReferenceProperty(reference_class=Camper) achievement = db.ReferenceProperty(reference_class=Achievement) session = db.ReferenceProperty(reference_class=Session) passed = db.BooleanProperty(default=True) 班级成绩(数据库模型): 露营者=db.ReferenceProperty(参考类=露营者) 成就=db.ReferenceProperty(参考类=成就) session=db.ReferenceProperty(reference\u class=session) passed=db.BooleanProperty(默认值=True) 我想找出两件事:
加载数据的代码应该是什么样子的?
什么应该触发加载代码来执行?

我认为您指的是某种写后缓存,但您的问题并不是很清楚

这是一种常见的模式,用于从慢速源(如数据库/磁盘)读取数据,并将其缓存在快速源(如memcache/memory)中,以便以后快速检索。当事情发生变化时,清空所有缓存项是您的责任


请参见

上的第一个示例,如果它确实创建过一次,并且在部署生命周期内从未更改过,而且相对较小(几兆或更少),请将其作为数据文件与应用程序一起存储。让应用程序先将数据加载到内存中,然后缓存在内存中。

你的两个问题非常模糊。“加载数据的代码应该是什么样子?”很难说。模型的结构并不能确切地说明您想要实现什么或可能应用什么业务规则。“什么应该触发加载代码执行?”完全不知道这意味着什么。这里的关键是它是查找数据。它相当于一个编程常量的数据库。数据定义一次,然后再也不会更改。它由应用程序在python内部或.yaml文件中加载。它不受用户输入的影响。对于模棱两可的地方,很抱歉,谢谢您的回复。但是,我不是指缓存。我当然可以用它来加快速度。这不是我要解决的问题。@Nick Johnson:数据确实符合这些条件。假设我愿意将其保存在内存中而不是数据存储中,那么如何生成python应用程序初始化时执行的代码?@zudduz这解释了模块如何在应用程序引擎中缓存:请注意,您必须重构
CamperAchievment
才能保存dict(可能)键而不是使用referenceproperty…@zudduz只是将函数调用放在模块级别,放在一个模块中,该模块将由请求处理程序脚本导入。