CachedQuery

数据请求类 Query 的缓存实现,接口跟 Query 完全一样

实例方法

filter

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

Query.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

Query.offset

用法:

q = Dummy.cq.offset(1)

limit

Query.limit

用法:

q = Dummy.cq.limit(1)

order_by

Query.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

Query.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

Query.join

用法:

q = Foo.cq.join(Dummy).filter(Foo.age == Dummy.age)

left_join

Query.left_join

right_join

Query.right_join

first

Query.first

用法:

dummy = Dummy.cq.filter(age=1).first()

all

Query.all

用法:

dummys = Dummy.cq.filter(age=1).all()