瞎扯淡 其实你不需要 ORM

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

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

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

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

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

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

共收到 29 条回复

我是从面向过程开发走过来的,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里我要经常要用到的功能留下

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