web-dev-qa-db-ja.com

SQLAlchemy(ORM)と生のSQLクエリ

先月、私はFlaskの研究に専念しました。これは、python Webアプリケーションを構築するためのフレームワークです。

オンラインで見つけたさまざまなチュートリアルに従って、SQLAlchemyを発見しました。

正直に言うと、SQL言語についてかなりの知識があるので、複雑であまり役に立たないと思います。

私が理解したいのは、SQLAlchemyのようなORMを使用することで得られない大きなメリットがあるかどうかです(おそらく、純粋なsqlを使用する際に、わからないセキュリティ上の問題があるでしょうか?)。

また、純粋なSQLクエリを操作するのに最適なpythonライブラリを教えていただければ幸いです。

14
a.costa

沢山あります。生のSQLクエリの代わりにORMを使用することの最大の利点は次のとおりです。

  1. 堅牢性:さまざまなデータベースソースのSQLクエリを記述する際に発生する可能性のある構文エラーを心配する必要はありません。実際には、すべてのDBソースの構文を知っている必要はありません。同じORMクエリがすべてのユーザーに対して機能します。 MySQLのようなSQLベースのエンジンでも、MongoDBのようなNoSQLベースのエンジンでも
  2. スケーラビリティ:ビジネス要件の変化、または処理するデータの種類/量。データベースエンジンを変更することは非常に一般的です。 ORMが処理するため、クエリの破損を心配する必要はありません。唯一の条件は、ORMがそのデータソースをサポートすることです。
  3. SecuritySQL Injections などによるセキュリティ違反を心配する必要はありませんORMはすでにそれらに対する保護シールドとして機能します
  4. 信頼:ORMの作成に取り組んだ世界中のインテリジェントマインドの集団が、時間の経過とともに直面するシナリオと問題に対処しました。一人の人間がそれらの多くの側面を見逃しているかもしれないので、私は。したがって、ORMを使用すると、予期しない問題が発生しにくくなります。 (それはORMが完璧であるという意味ではありませんが、それらはエラーが発生しにくいです)
  5. Time:ORMを使用すると、多数のオープンソースライブラリをサポートできます。たとえば、データの移行、データをチェックするWebポータル、データシリアライザー、などです。したがって、はるかに重要な作業のために時間を節約できます。

それらにはいくつかの副作用もありますが:

  1. 速度:ORMは、コードとクエリ実行の間のミドルウェアとして機能するため、低速です。実際、ORMは同じ生のクエリを内部的に作成して、目的の結果を取得します。
  2. Scope:ORMは実装のスコープを制限する場合があります。私が述べたように、それらはミドルウェアとして機能します。データベースエンジンが一部の機能をサポートしている可能性がありますが、ORMには実装されていません。ただし、そのようなシナリオでは、常に生のSQLクエリを記述して目的の結果を得ることができます。

私が言及した利点のため、私はORMが好きです。

23