Python中缺少动态查找器和方法

发布于 2021-01-29 17:01:49

我正在尝试在Python(用于webapp /GAE)中实现类似Rails动态查找器的功能。动态查找器的工作方式如下:

  • 您的人员有一些字段:姓名,年龄和电子邮件。
  • 假设您要查找所有名称为“ Robot”的用户。

Person类具有一个称为“ find_by_name”的方法,该方法接收名称并返回查询结果:

 @classmethod
 def find_by_name(cls, name):
    return Person.gql("WHERE name = :1", name).get()

不必为每个属性编写类似的方法,我想使用类似Ruby的method_missing的方法来执行此操作。

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在这里实际上没有必要使用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()等。这是更通用的方法,但是如果您愿意的话,当然可以使其仅返回单个实体。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看