web-dev-qa-db-ja.com

Django ORMでは不十分な場合の未加工のSQLとSqlAlchemy

Djangoプロジェクトで、Django ORMがいくつかの複雑なクエリを実行できない場合、次の2つのオプションがあります。

  1. 未加工のSQLクエリを使用する

  2. SqlAlchemyを使用する

上記の2つのオプションのいずれかを選択する際に役立つ、両方の長所と短所などのルールがあるかどうかを知りたいです。それとも私たちが好きなものに完全に依存していますか?

7
codecool

[〜#〜] orm [〜#〜]

  • Proコードをカスタマイズしなくても、さまざまなDBMSで使用できます。
  • Proコード/ DBの統合を容易にします。
  • ProORM /テーブル定義からの追加の型チェック。
  • Proデータベースの移行を容易にします。
  • Pro基本的に、DB統合用のDSL。
  • Con理解する追加コンポーネント(ORMがSQLを作成する方法を理解する必要があります)
  • ConSQLをカスタマイズすると、さまざまなDBMSでの使いやすさが失われます。

Raw SQL

  • Proコードに含まれているため、使用されているSQLを知っています。
  • ProSQLと統合をさらに制御します。
  • Pro複雑さを軽減(ORMなし)。
  • ConSQLの1つのDBMSフレーバーに関連付けられています。
  • Con手動コード/ DB統合。

複雑さの問題

私はこれにうんざりするだろうと確信していますが、.

その支持者の多くとは異なり、私はORMがSQLを理解することから開発者を解放するとは思いません。 ORMが作成したSQLを処理することになるため、SQLを理解する必要があります。そしてここに理由があります:

  • SQLステートメントは通常、特定のプロジェクトでパフォーマンスのチューニングが必要な最初の要素の1つです。
  • ORMはまだ若いです。実際のSQLパーサーを実装していることを私が知っているものはありません。つまり、簡単なステートメントの外では、構築されたSQLはしばしば非効率的であり、場合によっては正しくありません。

これは、ORMを使用してはならないという意味ではありません。それらはまだあなたが書かなければならないコードの量を減らすことができます。しかし、あなたがあなたがあなたが思うと思うすべての利益を得られないかもしれないことを理解するべきです。

9
dietbuddha