1

私はPythonにまったく慣れていませんが、両方を見てきました

Entries.objects.raw("SELECT * FROM register_entries")

Entries.objects.filter()

同じクエリを実行します。

どちらの場合にどちらを使用するのが良いですか?

4

2 に答える 2

5

使用しているデータベース バックエンドによって異なります。1 つ目は、SQL ベースのデータベース エンジンを使用していることを前提としています。それは必ずしも真実ではありません。反対に、2 番目のものはどのような場合でも機能します (バックエンドがそのように設計されている場合)。たとえば、数年前にそのように設計された LDAP バックエンドがありましたが、LDAP クエリは SQL 言語をまったく使用しません。

いずれの場合も、 2 番目のものを使用することをお勧めします。再利用可能で長期的なコードを作成したい場合は、これがより良い方法です。

最初のものよりも2番目のものを好む他のアイデアもあります

  • SQL インジェクションの可能性を回避します。
  • データベースの設計 (テーブルの名前、フィールドの名前) について知る必要はありません。
  • 一般的なコードは特定のコードよりも優れています。
  • さらに、それは短いです...

ただし、特定の操作 (特定のバックエンドの関数を呼び出す) を行うときに最初のものを使用する必要がある場合がありますが、可能な限り避けてください

一言で言えば、2番目のものを使用してください!!!

于 2013-06-29T13:53:37.903 に答える
1

ジャンゴのドキュメントから:

モデル クエリ API が十分に機能しない場合は、生の SQL の記述にフォールバックできます

あらゆる面で、django queryset api は、クエリをカスタマイズするための多くのオプションを提供します。しかし場合によっては、django api が不十分になる非常に具体的なクエリを使用する必要があります。ただし、生の SQL を使用する前に、すべての Queryset Api ドキュメントを読み、django クエリセット API についてすべてを学ぶことをお勧めします。

于 2013-06-29T13:59:24.983 に答える