如何在Google App Engine(Python)中存储和更新配置

时间:2013-08-09 09:17:57

标签: python google-app-engine google-cloud-datastore

给定一个由几个值组成的配置,比如displayName和startingDate,大部分时间都是常量,但也可以由用户通过谷歌应用的子页面编辑,这是最好的存储方式和修改此配置?

目前我有这样的事情:

class Configuration(ndb.Model):
    displayName = ndb.StringProperty()
    starting = ndb.DateTimeProperty()

并像这样修改:

allConfigurations = Configuration.query().fetch(1)
current = None
try:
    current = allConfigurations[0]
except:
    current = Configuration()
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()

基本上,这将检索所有配置,将结果限制为仅一个(或者如果数据存储为空,则创建新配置),修改值并将其写回数据存储。但对我而言,这似乎很复杂,成为首选方式。

修改 在另一个环境中,我可能会使用.ini文件。我基本上都在寻找相当于谷歌应用程序引擎。

2 个答案:

答案 0 :(得分:2)

AFAIK没有任何其他方法可以达到你想要的效果,不过我可能会更喜欢它..

current = Configuration.query().get() or Configuration()
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()

但我无法帮助自己,并且必须允许替代配置..

id = self.request.get('id') or 'default'
config = Configuration.get_by_id(id) or Configuration(id = id)
config.displayName = self.request.get('newDisplayName')
config.starting = self.request.get('newStartingDate')
config.put()

答案 1 :(得分:1)

在GAE上,文件系统是只读的,这意味着您无法在配置文件中写入,并且您的方式是正确的。

如果您想简化代码,可以使用字符串ID并使用方法get_or _insert()获取

current = Configuration.get_or_insert('current')
current.displayName = self.request.get('newDisplayName')
current.starting = self.request.get('newStartingDate')
current.put()