Python的peewee orm库允许我使用get
方法查询数据库,如下所示:
grandma = Person.get(Person.name == 'Grandma L.')
此查询将根据在后台执行sql where
的人名过滤结果集。你知道吗
我知道表达式Person.name == 'Grandma L.'
首先计算,get
方法只接收一个布尔值。你知道吗
get
方法如何检查它的参数来检测过滤器是否需要应用于'name'字段?你知道吗
PS:我读过peewee的资料,但不知道它是怎么做到的。你知道吗
Tags:
我不知道皮维具体是怎么做的,但我知道这类事情是怎么做的。你知道吗
基本上,你句子的第二部分不是真的。
name
是自定义类型。它的__eq__
方法不仅仅返回一个布尔值,而是一个包含实际执行比较的信息的对象。(这个类甚至可以从bool
派生出来,所以它在其他上下文中的工作方式类似于布尔值)。你知道吗但是
Person.name
怎么知道它的名字是name
?的答案是Person
实际上可能没有name
属性。相反,它有一个__getattr__()
方法返回name
对象,这是一个自定义类,它有我刚才描述的__eq__
方法。你知道吗由于
Person.__getattr__()
接收属性的名称,它可以将该名称烘焙到它为name
返回的值中。然后name
上的自定义__eq__
方法返回一个类似布尔的对象,其中包含name == 'Grandma L.'
的一些表示。并且Person.get()
使用这个表示来组合查询。你知道吗相关问题 更多 >
编程相关推荐