python flask与django的区别_Flask 和 Django 的比较

20

2016-04-23 18:48:08 +08:00   1

其他的我就不发表观点了,我只想说『 Django 的自带 ORM 非常优秀,综合评价略强与 SQLAlchemy 』这样的评价没有能说明任何问题,以下是我的见解

在 Python 以及关系型数据库 ORM 中对应的 Django 跟 SQLAlchemy 可谓两个很典型例子。 Django 很明显是从 RoR 里面得到启发,因此很多时候它也很像 RoR ,比如 Django 就是典型的 Active Record,数据库里面的行直接映射成 Model 的实例,并且所有对数据库的操作是直接与实例绑定,例子即为:

New.objects.create(title='sport', author_name='Neo')

对象(实例)不单单封装了数据库表里面的一行(数据)还封装了数据库的操作,以及在这些数据上面有领域逻辑,比如:

User.objects.create_user('john', '[email protected]', 'johnpassword')

Active Record 对象不仅仅有访问数据的一些方法,而且还有领域逻辑(我们实际的业务逻辑),而且领域模型中的数据跟数据库基本吻合

而 SQLAlchemy 的领域模型就不一样, SQLAlchemy 是基于 Data Mapper 设计而成的。 SQLAlchemy 的数据操作是不能直接作用与实例,它是通过一个 proxy(Data Mapper)来维护领域模型(大致上对应 SQLAlchemy 里面我们定义的 Model )跟数据库表的映射关系,它最大的优点便是数据库表跟领域模型是两个独立的概念,他们之间的关系是解耦的,因此他们可以独立演变,这之后需要做的只不过是我们去更新 Data Mapper 。因此 SQLAlchemy 给我的最大印象就是,它可以实现多态,比如一个 Animal 类可以对应数据库里面的 Dog 跟 Cat 表,以至于一个 Animal 的 cry 方法可以返回"woof"或者"meow"

同时 SQLAlchemy 还有 core 模块去提供高效率的查询(效率可以达到 raw sql 的水平)同时它的查询方式跟 Django 比起来更多样,比如 SQLAlchemy 的 ORM 模块能提供跟以下 SQL 语句对应的查询方式(仅通过一个查询):

select username, score from users join classmates on users.user_id=classmates.user_id where classmates.age > 20 group by (users.username, MAX(users.score));

我个人是觉得 SQLAlchemy 从功能以及灵活性来说都是源于强于其他 ORM ( python 以及对应关系型数据)。但是它跟 Django 比起来就是它有一个很陡峭的学习曲线,这是它的最大缺点。因此我是建议简单项目或者与 Django 相关的使用 Django ORM ,其他的话,若是你们团队协作,而且会有领域模型跟数据库表演进速度不一致的情况,那么选用 SQLAlchemy 是一个不错的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值