peewee的get方法如何生成where子句?

2024-06-28 23:35:03 发布

您现在位置:Python中文网/ 问答频道 /正文

Python的peewee orm库允许我使用get方法查询数据库,如下所示:

grandma = Person.get(Person.name == 'Grandma L.')

此查询将根据在后台执行sql where的人名过滤结果集。你知道吗

我知道表达式Person.name == 'Grandma L.'首先计算,get方法只接收一个布尔值。你知道吗

get方法如何检查它的参数来检测过滤器是否需要应用于'name'字段?你知道吗

PS:我读过peewee的资料,但不知道它是怎么做到的。你知道吗


Tags: 方法name过滤器sql参数get表达式orm
1条回答
网友
1楼 · 发布于 2024-06-28 23:35:03

I know the expression Person.name == 'Grandma L.' is evaluated first and the get method receives just a boolean value.

我不知道皮维具体是怎么做的,但我知道这类事情是怎么做的。你知道吗

基本上,你句子的第二部分不是真的。name是自定义类型。它的__eq__方法不仅仅返回一个布尔值,而是一个包含实际执行比较的信息的对象。(这个类甚至可以从bool派生出来,所以它在其他上下文中的工作方式类似于布尔值)。你知道吗

但是Person.name怎么知道它的名字是name的答案是Person实际上可能没有name属性。相反,它有一个__getattr__()方法返回name对象,这是一个自定义类,它有我刚才描述的__eq__方法。你知道吗

由于Person.__getattr__()接收属性的名称,它可以将该名称烘焙到它为name返回的值中。然后name上的自定义__eq__方法返回一个类似布尔的对象,其中包含name == 'Grandma L.'的一些表示。并且Person.get()使用这个表示来组合查询。你知道吗

相关问题 更多 >