Python web2py查询表达式是如何工作的?
我最近才有机会看一看web2py框架,虽然我以前有一些使用Django和普通Python的经验,但我无法理解web2py使用的查询系统 让我们从 web2py作者说,Python web2py查询表达式是如何工作的?,python,web2py,Python,Web2py,我最近才有机会看一看web2py框架,虽然我以前有一些使用Django和普通Python的经验,但我无法理解web2py使用的查询系统 让我们从 web2py作者说,(db.mytable.myfield>'A')不会直接计算为True/False,而是在选择时对每一行进行实际计算。我理解这是允许将这些表达式用作查询对象甚至组合的原因 我试图在网上找到这个问题的答案,但没有找到,所以我的问题是:为什么这些查询表达式没有立即计算为True/False?比如说,为什么myquery的值不是真的?我可
(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 DALField
类的一个实例,它继承自DAL表达式
类。表达式
类本身重载了许多Python操作符,例如=
,
等。当这些重载操作符应用于表达式
(因此字段
)对象时,它们返回的是DAL查询
类的实例,而不是标准的Python对象。下面是>
(\uu gt\uu
)运算符的代码
有关Python中运算符重载的详细信息,请参阅。链接向下____@快走,gluon到底是什么gluon是所有web2py代码的包(?)名称。这里有一个更为流行的链接:
db.mytable.myfield > 'A'