等于,不等于
db(db.person.dept == 'marketing').select(db.person.ALL)
db(db.person.dept != 'marketing').select(db.person.ALL)
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)
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()
大多数数据库中,like都是大小写敏感的,ilike和case_sensitive用于大小写脱敏查询
db(db.person.name.like('John%',case_sensitive=False)).select()等于db(db.person.name.ilike('John%')).select()
包含查询,用于单个字段的 多个 或逻辑 组合;
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通常和嵌套查询一起用,我们后面还会讲到
正则表达运算
db(db.person.id.regexp('^\+?[1-9][0-9]*$')).select()
红色的 正则表达式,意思是必须全是正整数
?date,datetime格式的字段,快速提取其中 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()
?? ?用于string 或者 text 数据类型的字段。
?? db(db.person.name.len()>5).select()
用于查询结果有多少天记录的技术
db(db.person.name.contains('x')).count()
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`)"]