web-dev-qa-db-ja.com

SQLAlchemyまたはpsycopg2?

私は、データベース(PG)とのやり取りを必要とする、すばやくて汚いスクリプトを書いています。

スクリプトは、既存の問題に対する実用的で戦術的なソリューションです。ただし、スクリプトは時間の経過とともにより「洗練された」システムに進化することを想定しています。現在、非常に迅速にまとめられている(つまり、膨大な量のドキュメンテーションを注ぐ時間がない)という事実を考えると、psycopgを使用して、迅速で汚いルートに行きたくなります。

Psycopg2の利点(私が現在理解している)は次のとおりです。

  1. cで書かれているので、sqlAlchemy(Pythonで書かれている)より高速ですか?
  2. 1つのdbと1つのdbのみで動作するため、DBAPIを介した抽象化レイヤーはありません(含意->高速)
  3. (今のところ)ORMは必要ないので、新しいORM構文(軽量など)を覚えなくてもSQLステートメントを直接実行できます。

短所:

  1. ORMがさらに必要になることを知っています
  2. psycopg2は( "dated"?)-どれくらいの期間存続するかわからない

私のSqlAlchemyの認識(遅い/解釈、肥大、急な学習曲線)はtrueです-ISとにかくpsycopgを使用したい「ラフで準備ができた」方法でsqlAlchemyを使用できます-つまり:

  1. oRMレイヤーなどをいじることなく、SQLステートメントを直接実行します。

これを行う例はありますか?

32

SQLAlchemyはORMで、psycopg2はデータベースドライバです。これらは完全に異なるものです:SQLAlchemy generates SQLステートメントとpsycopg2はSQLステートメントをデータベースに送信します。 SQLAlchemyは、psycopg2または他のデータベースドライバーに依存してデータベースと通信します!

かなり複雑なソフトウェアレイヤーとして、SQLAlchemyはオーバーヘッドを追加しますが、少なくともライブラリを学習すると、開発速度が大幅に向上します。 SQLAlchemyは優れたライブラリであり、ORMの概念全体を学習しますが、最初からSQLステートメントを生成したくない場合は、SQLAlchemyは必要ありません。

52
Jochen Ritzel

データベースと対話するには、そのためのドライバーが必要です。 SQL Plus for Oracle、MysqlCLI for Mysqlなどのクライアントを使用している場合は、直接クエリが実行され、そのクライアントにはDBServerパックが付属しています。

外部からJava、c、python、C#などの言語で通信するには、そのデータベース用のドライバーが必要です。 psycopg2は、PythonからPostgreSQLのクエリを実行するためのドライバーです。

SQLAlchemyは、データベースドライバとは異なるORMです。データベース固有の標準がなくてもコードを記述できるように、柔軟性を提供します。 ORMは、プログラマーにデータベースの独立性を提供します。 object.save ORMでは、オブジェクトに関連付けられているデータベースを確認し、バックエンドデータベースに従って挿入クエリを生成します。

4
Nilesh