SQLアルケミー
Python SQL ツールキットとオブジェクト リレーショナル マッパー
導入
SQLAlchemy は、アプリケーション開発者に SQL のフルパワーと柔軟性を提供する Python SQL ツールキットおよびオブジェクト リレーショナル マッパーです。 SQLAlchemy は、効率的で高パフォーマンスのデータベース アクセスを目的に設計され、シンプルな Python ドメイン言語に適応された、よく知られたエンタープライズ レベルの永続パターンの完全なスイートを提供します。
SQLAlchemy の主な機能は次のとおりです。
- アイデンティティ マップ、作業単位、およびデータ マッパー パターンに基づいてコアから構築された、産業用強度の ORM。これらのパターンでは、宣言型構成システムを使用してオブジェクトを透過的に永続化できます。ドメイン モデルは自然に構築および操作でき、変更は現在のトランザクションと自動的に同期されます。
- リレーショナル指向のクエリ システム。オブジェクト モデルの観点から、結合、サブクエリ、相関、その他ほとんどすべてを含む SQL の機能の全範囲を明示的に公開します。 ORM を使用したクエリの作成には、SQL を作成するときに使用するのと同じリレーショナル合成手法が使用されます。リテラル SQL はいつでも使用できますが、実際には必要ありません。
- 関連するコレクションとオブジェクトの一括読み込みの包括的で柔軟なシステム。コレクションはセッション内にキャッシュされ、個別のアクセスでロードしたり、結合を使用して一度にロードしたり、結果セット全体にわたってコレクションごとにクエリによってロードしたりできます。
- コア SQL 構築システムと DBAPI インタラクション レイヤー。 SQLAlchemy コアは ORM とは別のもので、それ自体が完全なデータベース抽象化レイヤーであり、拡張可能な Python ベースの SQL 式言語、スキーマ メタデータ、接続プーリング、型強制、およびカスタム タイプが含まれています。
- すべての主キー制約と外部キー制約は複合的で自然なものであると想定されます。もちろん、サロゲート整数主キーは依然として標準ですが、SQLAlchemy はこのモデルを想定したり、このモデルにハードコードしたりすることはありません。
- データベースのイントロスペクションと生成。データベース スキーマは、データベースのメタデータを表す Python 構造に 1 ステップで「反映」できます。これらの同じ構造は、ORM から独立して、すべてコア内で CREATE ステートメントをすぐに生成できます。
SQLAlchemy の哲学:
- SQL データベースは、サイズとパフォーマンスが重要になるにつれて、オブジェクト コレクションのように動作しなくなります。オブジェクト コレクションは、抽象化が重要になるにつれて、テーブルや行のように動作しなくなります。 SQLAlchemy は、これらの原則の両方に対応することを目指しています。
- ORM では「R」を隠す必要はありません。リレーショナル データベースは、完全に公開されるべき豊富なセットベースの機能を提供します。 SQLAlchemy の ORM は、開発者がドメイン モデルとリレーショナル スキーマの間にカスタム調停層を構築できるようにする、オープンエンドのパターン セットを提供し、いわゆる「オブジェクト リレーショナル インピーダンス」の問題を遠い記憶に変えます。
- すべての場合において、開発者は、オブジェクト モデルとリレーショナル スキーマの両方の設計、構造、および命名規則に関するすべての決定を行います。 SQLAlchemy は、これらの決定の実行を自動化する手段のみを提供します。
- SQLAlchemy を使用すると、「ORM が不正なクエリを生成した」ということはありません。結合の編成方法、サブクエリと相関の使用方法、要求される列など、クエリの構造を完全に制御できます。 SQLAlchemy が行うことはすべて、最終的には開発者による決定の結果です。
- 問題に ORM が必要ない場合は、ORM を使用しないでください。 SQLAlchemy は、コアと別個の ORM コンポーネントで構成されます。コアは、ターゲット データベースの SQL 文字列に直接レンダリングする SQL 構造の Pythonic 構築を可能にする完全な SQL 式言語を提供し、本質的に拡張された DBAPI カーソルである結果セットを返します。
- トランザクションは標準であるべきです。 SQLAlchemy の ORM では、commit() が呼び出されるまで永続ストレージには何も保存されません。 SQLAlchemy は、アプリケーションが一連の操作の開始と終了を説明する一貫した手段を作成することを奨励します。
- SQL ステートメントではリテラル値を決して表示しないでください。バインドされたパラメーターが可能な限り最大限に使用されるため、クエリ オプティマイザーがクエリ プランを効果的にキャッシュできるようになり、SQL インジェクション攻撃が問題にならなくなります。
ドキュメント
最新のドキュメントは次の場所にあります。
https://www.sqlalchemy.org/docs/
インストール/要件
インストールに関する完全なドキュメントはインストールにあります。
ヘルプの入手 / 開発 / バグ報告
SQLAlchemy コミュニティ ガイドを参照してください。
行動規範
何よりも SQLAlchemy は、ユーザーと開発者間の礼儀正しく、思慮深く、建設的なコミュニケーションを重視しています。当社の現在の行動規範については、「行動規範」をご覧ください。
ライセンス
SQLAlchemy は MIT ライセンスに基づいて配布されます。