我最近一直在做很多研究,将 Pyramid 与 SQLAlchemy 结合使用,而不是将当前应用程序保留在 Django 中。这本身就是一场完整的辩论,但我不是来讨论这个的。
我想知道的是,为什么普遍认为 SQLAlchemy 比 Django ORM 更好?我发现的几乎每一个(如果不是每一个)比较都支持 SQLAlchemy。我认为性能很重要,因为 SQLAlchemy 的结构让它更顺利地转换为 SQL。
但是,我也听说对于更艰巨的任务,Django ORM 几乎无法使用。我想弄清楚这可能是一个多么巨大的问题。我一直在阅读切换到 SQLAlchemy 的原因之一是 Django ORM 不再适合您的需求。
因此,简而言之,是否有人可以提供 SQLAlchemy 可以执行的查询(不必是实际的 SQL 语法),但如果不添加额外的原始 SQL,Django ORM 就不可能做到?
更新:
自从我第一次提出这个问题以来,我一直注意到这个问题得到了相当多的关注,所以我想多花两分钱。
最后我们最终使用了 SQLAlchemy,我必须说我对这个决定很满意。
我正在重新审视这个问题,以提供 SQLAlchemy 的附加功能,到目前为止,我还无法在 Django ORM 中进行复制。如果有人可以提供如何做到这一点的例子,我会很乐意接受我的话。
假设您想使用一些 postgresql 函数,例如similarity(),它提供了模糊比较(请参阅:使用 PostgreSQL 快速查找相似字符串- tl;dr 输入两个字符串得到百分比相似度)。
我已经对如何使用 Django ORM 进行了一些搜索,除了使用原始 sql 之外什么也没发现,这从他们的文档中可以看出:https ://docs.djangoproject.com/en/dev/topics/db /sql/。
IE
Model.objects.raw('SELECT * FROM app_model ORDER BY \
similarity(name, %s) DESC;', [input_name])
然而,SQLalchemy 有 func(),如下所述:http: //docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.func
from sqlalchemy import desc, func
session.query(Model).order_by(func.similarity(Model.name, input_name))
这允许您为任何已定义的 sql/postgresql/etc 函数生成 sql,而不需要原始 sql。