pyDAL一个python的ORM(6) pyDAL常用运算

本文介绍了在使用PythonDAL进行数据库查询时,如何使用各种条件运算符如等于、不等于、范围比较、LIKE/ILIKE、正则表达式以及日期时间处理。同时涵盖了聚合函数如COUNT、SUM、AVG和MIN/MAX的使用方法。
摘要由CSDN通过智能技术生成

1  == !=

等于,不等于

db(db.person.dept == 'marketing').select(db.person.ALL)

db(db.person.dept != 'marketing').select(db.person.ALL)

2 >>=<<= (适用于数值、时间类型的字段)

db(db.person.age>= 'marketing').select(db.person.ALL)

db(db.person.birthday >=date(2000,1,1)).select(db.person.ALL)

   针对时间字段的格式的比较,我们用字符串格式的时间即可,pyDAL会帮我们自动转换为date和datetime数据结构,这点非常方便,例如:

db(db.person.birthday >= '2000-1-1').select(db.person.ALL)

db(db.person.birthday >= '2000-01-01').select(db.person.ALL)

datetime字段用一个date对象、date格式的字符串去比较也可以,例如

db(db.person.login_time >=date(2000,1,1)).select(db.person.ALL)

db(db.person.login_time >= '2000-01-01').select(db.person.ALL)

3likestartswith, endswith, contains

like要跟通配符%配合使用,熟练掌握like即可,其他三个都可以用like替代(他仨是为不熟悉SQL人员准备)

db(db.person.name.like('John%')).select() 等于 db(db.person.name.startswith('John')).select()

db(db.person.name.like('%John')).select() 等于 db(db.person.name.endswith('John')).select()

db(db.person.name.like('%John%')).select() 等于 db(db.person.name.contains('John')).select()

4ilike小写脱敏的like)、case_sensitive

大多数数据库中,like都是大小写敏感的,ilike和case_sensitive用于大小写脱敏查询

db(db.person.name.like('John%',case_sensitive=False)).select()等于db(db.person.name.ilike('John%')).select()

5 belongs

用于单个字段的 多个 或逻辑 组合;

names=['sarah','david','smith']

db(db.person.name.belongs(names)).select() 等价与

db( (db.person.name == 'sarah') |

     (db.person.name == 'david') |

     (db.person.name == 'smith') 

).select()

      belongs通常和嵌套查询一起用,我们后面还会讲到

6 regexp

正则表达运算

db(db.person.id.regexp('^\+?[1-9][0-9]*$')).select()

红色的 正则表达式,意思是必须全是正整数

7 year, month, day, hour, minutes, seconds 

 datedatetime格式的字段,快速提取其中 year, month, day, hour, minutes, seconds

 db(db.log.event_time.year() > 2018).select() 等价于

db(db.log.event_time > '2018-12-31 23:59:59').select()

8 len

    用于string 或者 text 数据类型的字段

   db(db.person.name.len()>5).select()

9 count

用于查询结果有多少天记录的技术

db(db.person.name.contains('x')).count()

10 sum, avg, min, max

对数值型字段求 和、平均、最小、最大

age_sum = db().select(db.person.age.sum()).first()[sum]

age_avg = db().select(db.person.age.avg()).first()[avg]

age_min = db().select(db.person.age.min()).first()[min]

age_max = db().select(db.person.age.max()).first()[max]

可以多个字段一起混合sum, avg, min, max吗?

pyDAL手册中没有例子,也没有j进行说明,经过实践是可以的,只是要获得计算结果,我们要特殊操作下:

record = db().select(db.person.age.min(),db.person.age.avg(),db.person.age.max(),

                                db.person.salary.sum(),db.person.salary.avg(),).first()

age_min = record ["_extra"]["MIN(`person`.`age`)"]

age_avg = record ["_extra"]["AVG(`person`.`age`)"]

age_max = record ["_extra"]["MAX(`person`.`age`)"]

salary_avg = record ["_extra"]["AVG(`person`.`salary`)"]

salary_sum = record ["_extra"]["SUM(`person`.`salary`)"]

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值