SQLAlchemy 比 Django 自带的 ORM 好在哪里?

2017-02-08 04:33:02 +08:00
 eyp82

最近看了一下 SQLAlchemy 的文档, 感觉大致的使用方式跟 Django ORM 很像(包括 Peewee 之类都很像), 就是细节上感觉有点拧巴, 不如 Django 的 ORM 那么自然. 那 SQLAlchemy 相比有哪些优势呢? 谢谢大家.

16669 次点击
所在节点    Python
54 条回复
ratazzi
2017-02-09 09:01:28 +08:00
还是 SQLAlchemy 功能完善,即使只是拼 SQL ,比如
sa.func.date(Model.c.created_at.op('AT TIME ZONE')(tz))

一些较新的特性,比如 hstore 、 json 之类也是 SQLAlchemy 支持好
Panmax
2017-02-09 09:03:46 +08:00
@chaleaoch 你好,想请教下 SqlAlchemy 的分表实现方法。

我现在是用 automap_base 来反向映射的表结构。
chaleaoch
2017-02-09 09:24:48 +08:00
@Panmax 我也不会,只是又一次参加 pycon 年会的时候 达达的 rest api 负责人在做分享的时候讲到过.
你可以搜搜 2016 python 上海 网上能找到视频和 ppt 以及 github.
findex
2017-02-09 17:37:34 +08:00
@bigzhu 我自己写了 ORM 后,觉得不如 SQLAlchemy 功能多,于是我就用 sqla 了。但是 sqla 比我自己写的 orm 臃肿。谁让它功能多呢?

还有我要说说,很多游戏开发里面都用到了类似于 SQL ORM 的思想。什么 post connect, reconnect, 之类的都有。

我觉得, ORM 在于思想问题。 django 自带的 ORM 跟 django 本身镶嵌太密切了,定制性能不好。当然如果你是 rich 的人,全上 django ,多花钱整机器也行。可以参考 instagram 。 sqla 的案例就更多了,什么 reddit , yelp 等等。

要记得,优化好了的 ORM 总是不如优化好了的 SQL 纯净语句。我曾经为了这个动了些脑筋。
findex
2017-02-09 17:40:41 +08:00
@est Python 就应该统一起来。驼峰风格学习下 Java 什么的语言。这样大家都能迅速读懂。
可惜 python 的很多库写手,也许喝了瓶酒,写库的时候,命名非常不规范,反正发布了,能 work 就行。但是如果是大公司发布标准库的话,应该注意很多。
当然当年的 MS 的很多库命名也十分令人蛋疼。
est
2017-02-09 19:18:23 +08:00
@findex 2333 其实质量比较差的是标准库。。
wizardforcel
2017-02-09 22:45:30 +08:00
你们好像忽略了 java 上的 orm 。。基本都得手写 sql ,也就是查询结果能映射一下。

优点是数据库特性支持的很好(废话),缺点是需要较高的 sql 功底。
songdezu
2017-02-14 00:25:59 +08:00
我有个问题 大家看看对不对:
用 orm 的主要优势是能保证各中平台 python javascript 的语法一致性, 不用学习不同 lib 比如 pymongo mongoose 的不同 api
param
2018-05-19 10:36:05 +08:00
peewee 最大的问题在于没有好的 migration
param
2018-05-19 10:37:20 +08:00
@xiaket 我有一个项目就是单独使用 Django ORM
param
2018-05-19 10:43:34 +08:00
咦。。。发现自己一年多之前居然回复过这个帖。。
xiaket
2018-05-19 11:01:41 +08:00
@param lol, 这算是自己挖自己的坟? txtx
firejoke
2018-07-05 15:37:49 +08:00
@param 你好,有关于你的单独剥离 Django ORM 的相关笔记吗? (星星眼)~
thinker3
2018-09-15 09:26:49 +08:00
@firejoke 我写过,settings.py 只需要 DATABASES、INSTALLED_APPS 等关键的定义就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/338916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX