在这里实际上没有必要使用GQL-这只会使事情变得复杂。这是一个简单的实现:
class FindableModel(db.Model):
def __getattr__(self, name):
if not name.startswith("find_by_"):
raise AttributeError(name)
field = name[len("find_by_"):]
return lambda value: self.all().filter(field, value)
注意,它返回一个查询对象,您可以调用.get()、. fetch()等。这是更通用的方法,但是如果您愿意的话,当然可以使其仅返回单个实体。