CachedQuery
数据请求类 Query 的缓存实现,接口跟 Query 完全一样
实例方法
filter
用法:
q = Dummy.cq.filter(Dummy.id > 1, age=2)
assert q.get_sql_and_params() == ('SELECT * FROM `Dummy` WHERE `id` > %s AND `age` = %s', [1, 2])
on
同 Query.on
用法:
q = Foo.cq.join(Bar).on(Foo.id == Bar.foo_id)
assert q.get_sql_and_params() == ('SELECT * FROM `Foo` ON `Foo`.`id` = `Bar`.`foo_id`', [])
having
用法:
from olo import funcs
c = funcs.COUNT(1).alias('c')
q = Dummy.cq(Dummy.age, c).group_by(Dummy.age).having(c > 2)
assert q.get_sql_and_params() == ('SELECT `age`, COUNT(1) AS c FROM `Dummy` GROUP BY `age` HAVING c > %s', [2])
offset
用法:
q = Dummy.cq.offset(1)
limit
用法:
q = Dummy.cq.limit(1)
order_by
用法:
q = Dummy.cq.order_by('id')
q = Dummy.cq.order_by(Dummy.id)
q = Dummy.cq.order_by(Dummy.id.desc())
q = Dummy.cq.order_by('id', '-age')
q = Dummy.cq.order_by(Dummy.id, Dummy.age.desc())
group_by
用法:
q = Dummy.cq.group_by('id')
q = Dummy.cq.group_by(Dummy.id)
q = Dummy.cq.group_by('id', 'age')
q = Dummy.cq.group_by(Dummy.id, Dummy.age)
join
用法:
q = Foo.cq.join(Dummy).filter(Foo.age == Dummy.age)
left_join
right_join
first
用法:
dummy = Dummy.cq.filter(age=1).first()
all
用法:
dummys = Dummy.cq.filter(age=1).all()