首先我要说的是,我完全主张在大多数简单案例中使用ORM.使用非常简单(关系)的数据模型时,它提供了很多便利.
但是,既然你问了缺点......
从概念的角度来看,ORM永远不能成为底层数据模型的有效表示.它最多只能是您数据的近似值 - 大多数情况下,这就足够了.
问题是ORM将在"一个类 - >一个表"的基础上映射,这并不总是有效.
如果你有一个非常复杂的数据模型 - 理想情况下,它不能由单个数据库表正确表示 - 那么你可能会发现你花了很多时间来对抗ORM,而不是让它适合你.
在实践层面上,你会发现总有一种解决方法; 一些开发人员将支持/反对ORM,但我赞成采用混合方法.Django适用于此,因为您可以根据需要轻松地放入原始SQL.就像是:
Model.objects.raw("SELECT ...")
Run Code Online (Sandbox Code Playgroud)
当您针对数据执行简单的CRUD操作时,ORM会从99.99%的其他情况中完成大量工作.
根据我的经验,完全避免ORM的两个最佳理由是:
但是,当所有的说法和完成后,在与Django广泛合作之后,我可以一方面指望ORM不允许我按照自己的意愿行事的次数.
SQLAlchemy对这个问题的回应的创建者是django,现在被认为是pythonic..这显示了对系统的许多差异和深刻理解.
sqlalchemy_vs_django_db讨论reddit
注意:两个链接都很长,需要时间阅读.我不是在写那些可能导致误解的要点.
Django粉丝的另一个答案,但是:
Group By
并且Having
使用aggregate
/ 很难翻译条款annotate
.model.id IN [1, 2, 3... ludicrous long list]
__contains
,但不是"字段在东西".由于在DBMS中没有可移植的方法来执行此操作,因此为其编写原始SQL非常烦人.如果您的应用程序开始变得复杂,那么会出现很多像这样的小边缘情况,因为正如@Gary Chambers所说,DBMS中的数据并不总是与OO模型匹配.但更常见的是,我遇到的那些不想使用ORM的人出于错误的原因这样做:智力懒惰.有些人不会努力做出公平的尝试,因为他们知道某些事情,并希望坚持下去.你可以在计算机科学中发现其中有多少是可怕的,其中很大一部分工作就是要跟上新的东西.
当然,在某些领域它才有意义.但通常有理由不使用它的人会在其他情况下使用它.我从来没有见过任何严肃的计算机科学家说这一切,只是在某些情况下不使用它的人,并且能够解释原因.
公平地说,很多程序员都不是计算机科学家,有生物学家,数学家,老师或鲍勃,隔壁的人只是想帮助.从他们的角度来看,当你可以用你的工具箱做你想做的事情时,不花几个小时学习新东西是完全合乎逻辑的.
归档时间: |
|
查看次数: |
7356 次 |
最近记录: |