appengine ndb init model by kind name

时间:2012-04-04 11:09:05

标签: python google-app-engine app-engine-ndb

我需要存储数据,问题是我只知道模型名称与类名称相同

class Tasks(ndb.Model):
    title = ndb.StringProperty()

如果我已经拥有钥匙,我可以做到

model = ndb.Key(urlsafe=key).get()
model.title = "new tasks"
model.put()

现在我需要存储新的实体,我该怎么做?感谢

3 个答案:

答案 0 :(得分:1)

让您的用户能够实例化和存储任何类型的模型可能是一个非常糟糕的想法,因此进行直接映射可能是错误的方法。此外,它直接将您的内部数据存储表示与外部API耦合,这会产生额外的限制。

相反,您可能想要自己定义映射,如下所示:

model_map = {
    'external_name': model.MyModel,
    # ...
}

答案 1 :(得分:0)

ndb.Model._kind_map['Tasks'](title='...')

或者更通用的东西,比如

eval('Tasks')(title='...')

在这两种情况下,您都需要预先导入模型。

getattr(models, 'Tasks')(title='...')

如果models是模型所在的python模块。

答案 2 :(得分:0)

对于DB

from google.appengine.ext.db import class_for_kind
class_for_kind(model_name) -> returns model Class

对于NDB

from google.appengine.ext import ndb
ndb.Model._kind_map[model_name] -> returns model Class