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

Is there any way to pass NDB kind as string?

目前我使用如下代码 -

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

这里的Price是硬编码的种类名称。有什么办法可以得到类似的东西:

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

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)

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

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

使用 _kind_map 更有吸引力的是,如果您使用 PolyModel,对模型调用 query() 将正确过滤所需的 class。否则,这两个解决方案是等价的。您可以查看 source codeModel._query 的区别,以了解确切的区别。