瞎扯淡 其实你不需要 ORM

bhuztez · 2014年05月20日 · 最后由 bhuztez 回复于 2014年05月20日 · 5737 次阅读

我是标题党,很多时候 ORM 还是很有必要的。

不过有另外一些时候,明明知道要写的 SQL 是什么,不得不和 ORM 较劲,让 ORM 生成我期望的 SQL。不如让我直接写 SQL 吧。

但是,ORM 做了一件事,能把查询出来的按行的结果,关联起来。没有 ORM,就只能手工做了。这也太麻烦了。

我想了想,其实是很简单的。不到 300 行就能轻松实现这样的功能嘛。你也可以按这个思路自己实现。

https://github.com/bhuztez/warm/blob/master/warm.py

我是从面向过程开发走过来的,ORM 能使我更面向对象设计。

#1 楼 @winnie 面向对象就是面向过程啊

好吧,面向函数

其实你不需要 SQL

我是标题党,很多时候 SQL 还是很有必要的。

不过有另外一些时候,明明知道要写的文件格式是什么,不得不和 SQL 较劲,让 SQL 生成我期望的文件。不如让我直接写文件吧。

我看到.py,走错门了?

和用 script 语言一个意思,就是为了省事 + 快 当然你照样可以用 c 写网站,不代表 script 语言写网站就是多余的

复杂的业务直接 find_by_sql,一直都是这个原则。。。

django 的 orm 是最好用的 orm,没有之一

#7 楼 @karmue 你能看完内容再喷么

一句废话,该用 orm 的时候用 orm,该写 sql 的时候写 sql

这个和思维方式有关。如果脑袋里只想着 object, 用 ORM 就是自然而然的事情。直到实在没办法才会想到 SQL。

楼主干说无益,不如拿出一个例子来,让大家比一比,看看这个例子更适用于 ORM 还是 SQL

#8 楼 @badboy 如果的用的 mongodb 咋整?

注释里的代码是 python 2 啊

#15 楼 @luikore 对啊,这有啥问题么?

其实楼主的代码就是最初 activerecord 里 method_missing 的做法...

#17 楼 @luikore 重点不是 method_missing 啊

楼主可以看看 sequel http://sequel.jeremyevans.net/documentation.html ,python 的 SQL Alchemy 也和它类似

#18 楼 @bhuztez 哦,看到 Query()...compile() 了,这个不错,虽然比 has_many ... 之类的写法要麻烦点...

#19 楼 @nouse 我说的就是怎么样不用那种东西

#20 楼 @luikore 这里没法 has_many,就没有 Model 这种概念,而且,这里可以连续 join 好多次,这是 has_many 所没有的

#22 楼 @bhuztez 可以的啊,你给 RecordSet 加个 has_many 方法,然后别人用的时候就可以用 Article.has_many(author=User) 代替 Article.author = Query(Article).join(author_id=User.id).compile() 了...

#23 楼 @luikore 我这个完全可以写成 Query().join().join().join().join().compile() 的。已经能处理用 association table 表示 many-to-many 的情况

似乎 DBA 都不喜欢 ORM,前前东家就是纯手工拼 SQL + 手工清缓存,然后开进 Cache Expiration 的人民战争汪洋大海里。

请问楼主你实现的这玩意跟 ORM 有啥区别?一个换汤不换药的东西而已。

#10 楼 @bhuztez 用 orm 不就是为了少写 sql string

你能看懂别人的发言以后再胡喷么

#24 楼 @bhuztez ActiveRecord 有joins的。

#28 楼 @ericguo 关注点不是做 ORM 没有的东西,或者故意和现有的 ORM 不一样。我的想法是怎么样尽量少引入概念,写尽量少的代码,让我能直接写 SQL,又把 ORM 里我要经常要用到的功能留下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号