原文在 tumblr,大家自备梯子
http://blog.est.im/post/49564925054
由于被墙,我简单摘要一下博客内容
最亮的地方是他的语法
select(c for c in Customer
if sum(c.orders.price) > 1000)
然后实现原理
1. 首先select(x for x in ...) 这是一个generator comprehension,和list comprehension不同的是,返回的是一个惰性求值的生成器,于是
2. 该表达式bytecode可以反编译
3. 把Python的AST翻译成SQL的AST
4. 分离和优化查询。
5. 把SQL AST生成为特定数据库的query
6. 执行SQL query
7. 把返回构造成python对象,并且缓存。
很神器吧?比 Django ORM 和 SQLAlchemy 都方便很多,还有一个在线图形化的 Declare 生成器。。
http://blog.est.im/post/49564925054
由于被墙,我简单摘要一下博客内容
最亮的地方是他的语法
select(c for c in Customer
if sum(c.orders.price) > 1000)
然后实现原理
1. 首先select(x for x in ...) 这是一个generator comprehension,和list comprehension不同的是,返回的是一个惰性求值的生成器,于是
2. 该表达式bytecode可以反编译
3. 把Python的AST翻译成SQL的AST
4. 分离和优化查询。
5. 把SQL AST生成为特定数据库的query
6. 执行SQL query
7. 把返回构造成python对象,并且缓存。
很神器吧?比 Django ORM 和 SQLAlchemy 都方便很多,还有一个在线图形化的 Declare 生成器。。