Python web2py查询表达式是如何工作的?

Python web2py查询表达式是如何工作的?,python,web2py,Python,Web2py,我最近才有机会看一看web2py框架,虽然我以前有一些使用Django和普通Python的经验,但我无法理解web2py使用的查询系统 让我们从 web2py作者说,(db.mytable.myfield>'A')不会直接计算为True/False,而是在选择时对每一行进行实际计算。我理解这是允许将这些表达式用作查询对象甚至组合的原因 我试图在网上找到这个问题的答案,但没有找到,所以我的问题是:为什么这些查询表达式没有立即计算为True/False?比如说,为什么myquery的值不是真的?我可

我最近才有机会看一看web2py框架,虽然我以前有一些使用Django和普通Python的经验,但我无法理解web2py使用的查询系统

让我们从

web2py作者说,
(db.mytable.myfield>'A')
不会直接计算为True/False,而是在选择时对每一行进行实际计算。我理解这是允许将这些表达式用作查询对象甚至组合的原因


我试图在网上找到这个问题的答案,但没有找到,所以我的问题是:为什么这些查询表达式没有立即计算为True/False?比如说,为什么myquery的值不是真的?我可能缺少的Python功能是什么使它能够工作的?

基于对的评估应用于自定义(非内置)对象的任何操作符。这是众所周知的。 所以基本上字段类定义看起来很相似:

class DBField(...):
#...

   def __gt__(self,value):
      #building query object, based on value
      return query

db.mytable.myfield是一个gloon.sql.SQLField,它覆盖了
\uuu gt\uuu
方法,因此使用>运算符的表达式在计算时会生成一个gloon.sql.SQLQuery(请参见)。

其他答案都有,但只是为了提供更多web2py特定的细节:

db.mytable.myfield > 'A'
db.mytable.myfield
是web2py DAL
Field
类的一个实例,它继承自DAL
表达式
类。
表达式
类本身重载了许多Python操作符,例如
=
等。当这些重载操作符应用于
表达式
(因此
字段
)对象时,它们返回的是DAL
查询
类的实例,而不是标准的Python对象。下面是
>
\uu gt\uu
)运算符的代码


有关Python中运算符重载的详细信息,请参阅。

链接向下____@快走,gluon到底是什么gluon是所有web2py代码的包(?)名称。这里有一个更为流行的链接:
db.mytable.myfield > 'A'