Python操作符也是一种函数

本文探讨了Python操作符如何作为函数在SQLAlchemy的filter方法中应用,通过实例和类定义展示如何利用自定义操作符实现数据库查询。重点讲解了User对象和Field模型如何配合querySql函数完成复杂的查询条件表达式。
摘要由CSDN通过智能技术生成

Python操作符也是一种函数

最近在学习SQLAlchemy,发现它的sql查询的filter是这么写的:

rows = session.query(User).filter(User.name=='Tom').all()

其中filter把User.name=='Tom'这个表达式当成参数我是没想到的,表达式的返回值不是True或False吗?各种百度谷歌之后我找到这么一个答案:

python中的操作符也是一种函数

很神奇对不对,相信下面一段代码可以解释这个答案

class A(object):
    def __eq__(self, other):
        print("equal",other)
    def __getitem__(self, item):
        print("getitem",item)
if __name__ == '__main__':
    A.__eq__(A, 'B')               #equal B
    A.__getitem__(A, 'B')          #getitem B
    a = A()
    a == 'b'                       #equal b
    a['b']                         #getitem b

这里的==[]平时分别是用于相同判断和字典取值的,在这里对__eq__()__getitem__()重新定义后,这两个符号(函数)的功能也就发生了变化。
分析至此,我们上面提到的sqlalchemy中的filter功能也就不难理解了。那么在我看来,其filter功能大致和以下代码中的filter函数功能类似:

class Field(object):
    def __init__(self,key):
        self.key = key
    def __eq__(self, other):
        return '%s = %r'%(self.key, other)
    def __lt__(self, other):
        return '%s < %r'%(self.key,other)
class User(object):
    name=Field('name')
    age=Field('age')
def filter(str):
    return querySql(str)
def querySql(str):
    res = str #看成str处理后的结果
    return res
if __name__ == "__main__":
    print(filter(User.name == 'zhang'))
    print(filter(User.age < 20))

其中User用于定义数据模型,Field为字段模型,querySql为数据库查询函数。
以上,filter函数就可以经由上面传入的表达式来达到查询效果。
上述代码输出如下:

name = 'zhang'
age < 20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值