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

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`)"]

你可能感兴趣的:(web2py,python基础,数据库,web2py,python)