AST API

一组神奇的 API 🎉

借鉴(抄袭)Pony 用 Pythonic 的方式来请求数据

函数

select

参数是一个 generator

用法:

q = select(
    d for d in Dummy 
    if d.age > 1 and d.id < 10 or d.name in ['a', 'b']
)

# 完全等同于:

q = Dummy.cq.filter(
    (Dummy.age > 1) & (Dummy.id < 10) | (
        Dummy.name.in_(['a', 'b'])
    )
)

# 你没看错,用的是 `Dummy.cq`,所以用 `select` 函数默认是走缓存的,嘻嘻

类似的:

q = select(
    (d.id, d.name) for d in Dummy 
    if d.id == 10 or d.age > 10
)

# 完全等同于:

q = Dummy.cq('id', 'name').filter(
    (Dummy.id == 10) | (Dummy.age > 10)
)

是不是很神奇呢,代码也直观了许多,嘻嘻

还有更神奇的:

join

q = select(
    (f.id, b.id)
    for f in Foo 
    for b in Bar
    if f.age == b.age and f.id > 10
)

# 上面会生成下列 SQL:

'''
SELECT `foo`.`id`, `bar`.`id` FROM `foo` JOIN `bar`
WHERE `foo`.`age` == `bar`.`age` AND `foo`.`id` > 10
'''