最近、SQLAlchemyでPyramidを使用し、Djangoで現在のアプリケーションを使用することについて多くの研究を行ってきました。それだけで議論全体ですが、私はそれについて議論するつもりはありません。SQLAlchemyができることの例Django ORMはできません
私が知りたいことは、SQLAlchemyが普遍的にDjango ORMよりも優れていると考えられる理由です。ほとんどの場合、すべてではないにしても、私はSQLAlchemyの2つの好意を比較しました。私はSQLAlchemyの構造がよりスムーズにSQLに変換できるので、パフォーマンスは大きなものだと思います。
しかし、難しい作業では、Django ORMはほとんど使えないと聞いています。私はこの問題のどれくらいの巨大なものがあるのかを明らかにする。私はSQLAlchemyに切り替える理由の1つを読んできました.Django ORMがあなたのニーズに合っていなくなったときです。
つまり、SQLAlchemyが実行できるクエリ(実際のSQL構文である必要はありません)を提供することができますが、Django ORMは追加の未加工SQLを追加することなく実行できますか?
更新:
私は私が最初に尋ねたので、かなりの注目を集めてこの問題に気付いてきたので、私は私の余分な2セントでスローにしたいと思います。
最終的にSQLAlchemyを使用しましたが、私はその決定に満足していると言わなければなりません。
これまで、私はDjango ORMで複製できなかったSQLAlchemyの追加機能を提供するために、この問題を再検討しています。誰かがこれを行う方法の例を提供できるなら、私は喜んで私の言葉を食べるでしょう。
たとえば、similarity()のような、あいまいな比較を提供するpostgresql関数を使用したいとしましょう(Finding similar strings with PostgreSQL quickly-tl; dr入力2文字列がパーセント類似性を返す参照)。
Django ORMを使用してこれを行う方法についていくつかの検索を行い、raw 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を生成することを可能にしていませんraw SQLが必要です。
https://docs.djangoproject.com/en/1.11/ref/models/expressions/#func-expressions –