我最近在将Pyramid与SQLAlchemy结合使用以及在Django中保留当前应用程序方面进行了大量研究。那本身就是一个完整的辩论,但是我不是在这里讨论。
我想知道的是,为什么普遍认为SQLAlchemy比Django ORM好?我发现两者之间的几乎每一个比较(如果不是每个比较)都有利于SQLAlchemy。我认为性能是很大的,因为SQLAlchemy的结构使它可以更平滑地转换为SQL。
但是,我也听说过,通过更艰巨的任务,几乎不可能使用Django ORM。我想确定一个问题有多大。我一直在阅读切换到SQLAlchemy的原因之一是Django ORM不再适合您的需求。
简而言之,有人可以提供SQLAlchemy可以执行的查询(不一定是实际的SQL语法),但是Django ORM如果不添加其他原始SQL便无法做到?
更新:
自从我第一次问起这个问题以来,我就一直注意到这个问题,所以我想多花2美分。
最后,我们最终使用了SQLAlchemy,我必须对这个决定感到满意。
我正在重新讨论这个问题,以提供SQLAlchemy的其他功能,到目前为止,我还无法在Django ORM中进行复制。如果有人可以提供有关此操作的示例,那么我很乐意吃我的话。
假设您要使用一些postgresql函数,例如sameity(),该函数提供了模糊的比较(请参阅:使用PostgreSQL快速查找相似的字符串-tl; dr输入两个字符串会返回相似性百分比)。
我已经在使用Django ORM的方法上进行了一些搜索,发现除了使用原始sql之外,什么都没有发现,这从他们的文档中可以明显看出:https : //docs.djangoproject.com/en/dev/topics/db / sql /。
即
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。