python中query函数-query函数的可查询数据

#来看下源码func是什么鬼

func = _FunctionGenerator()是这个实例化出来的对象

class _FunctionGenerator(object):

"""Generate :class:`.Function` objects based on getattr calls."""

def __init__(self, **opts):

self.__names = []

self.opts = opts

构造没有func.min这些属性,怎搞出来的,如果对象.__dict__没有这个属性就会执行__getattr__这个方法,所以func.min =_FunctionGenerator(**self.opts)

def __getattr__(self, name):

# passthru __ attributes; fixes pydoc

if name.startswith('__'):

try:

return self.__dict__[name]

except KeyError:

raise AttributeError(name)

elif name.endswith('_'):

name = name[0:-1]

f = _FunctionGenerator(**self.opts)

f.__names = list(self.__names) + [name]

return f

print(func.sum)

1238299-20180922235520341-975462134.png

#func.sum()就是调用 __call__方法

def __call__(self, *c, **kwargs):

o = self.opts.copy()

o.update(kwargs)

tokens = len(self.__names)

if tokens == 2:

package, fname = self.__names

elif tokens == 1:

package, fname = "_default", self.__names[0]

else:

package = None

if package is not None:

func = _registry[package].get(fname)

if func is not None:

return func(*c, **o)

return Function(self.__names[-1],

packagenames=self.__names[0:-1], *c, **o) #func.sum(Article.price) 相当于 select sum(price) from article

1238299-20180922235957246-1621903411.png

1238299-20180923000114527-1752138723.png

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值