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

发布时间:2024年01月03日

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)

3like,?startswith,?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

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

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

db().select(db.person.age.avg()).first()[min]

db().select(db.person.age.avg()).first()[max]

可以几个字段一起sum,?avg,?min,?max吗,但是要特殊操作下

record_sum = db().select(db.person.age.sum(), db.person.salary.sum()).first()

sum_age = record_sum ["_extra"]["SUM(`person`.`age`)"]

sum_salary = record_sum ["_extra"]["SUM(`person`.`salary`)"]

文章来源:https://blog.csdn.net/u010018782/article/details/135358240
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。