有没有办法将NDB类型作为字符串传递?

时间:2015-05-05 16:48:33

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

目前我使用如下代码 -

Price.query().fetch(keys_only=True))

Price这里是硬编码的名称。有没有办法像:

def get_kind_keys(kindname):
    return Kind(kindname).query().fetch(keys_only=True)

2 个答案:

答案 0 :(得分:4)

ndb为所有型号保留dict,您可以亲自试用:

from google.appengine.ext import ndb

print ndb.Model._kind_map

您的代码段最终会是这样的:

def get_kind_keys(kindname):
    return ndb.Model._kind_map[kindname].query().fetch(keys_only=True)

答案 1 :(得分:2)

ndb.Query在其构造函数中接受一种。您可以将get_kind_keys实现为:

def get_kind_keys(kindname):
    return ndb.Query(kind=kindname).fetch(keys_only=True)

使用_kind_map更有吸引力的是,如果您使用PolyModel,则在模型上调用query()将正确过滤所需的类。否则,这两种解决方案是等效的。您可以查看Model._query的{​​{3}},看看到底有什么区别。