昨日は SQLAlchemy の使い方を簡単に紹介しましたが、最も興味深い ORM の部分については触れていませんでした。もちろん、公式ドキュメントの内容を中心に説明します。単純化や自己理解の部分があるかもしれませんが、権威ある根拠としては機能しません。
ORM の使用を開始すると、構成可能な構造を使用してデータベース テーブルを記述することができ、後で定義するクラスがこれらのテーブルにマップされます。もちろん、最新の SQLAlchemy (SQLAlchemy の新しいバージョン、原文は modern SQLAlchemy) はこれら 2 つのことを一緒に行うために宣言型を使用します。これにより、クラスの作成、データベース テーブルの記述と定義、およびそれらの間のマッピング関係を一度に行うことができます。
この一節はどういう意味ですか?簡単に言うと、SQLAlchemy は Classic (クラシック モード) と Modern (モダン モード) に分かれており、データベース テーブルを定義するための Classic のモードはより伝統的であり、最初にテーブルを記述する必要があります。
1. クラシックマッピング
たとえば、公式ドキュメントの例を見ると、次のテーブル構造があります:
以下でこのテーブルについて説明します。
2. 最新のマッピング
誰もが延々と説明テーブルを定義し、クラスを定義し、ORM を実装するためにマッピングを行っているとき、SQLAlchemy チームは、モダン モードであるより単純なマッピング方法を考え出しました。つまり、マッピング クラスを定義してすべてを完了することによって、一度のタスク。定義されたクラスを SQLAlchemy で管理するには、宣言型の概念が導入されます。これは、すべてのクラスが宣言型基本クラスのサブクラスである必要があり、この基本クラスは次のメソッドを通じて取得できることを意味します。
今の users テーブルの例を見てみましょう:
このようにして、User クラスは __tablename__ を使用してデータベース テーブルとのマッピングを確立し、その後、ID、名前、フルネーム、パスワードを含むテーブル列のコレクションを指定できます。誰もがすでに知っているはずです。id は、primary_key=True によって主キーとして指定されています。もちろん、一部のデータベース テーブルには主キーが含まれていない場合があります (ビューなど、もちろんビューもマップできます)。ORM が実際にテーブルをマップするには、少なくとも 1 つの列を主キー列として定義する必要があります。 。複合複数主キーなどの複数の列も適切にマッピングしてサポートできます。
User クラスには、__init__() 初期化クラス (コンストラクター メソッド) や __repr__() 文字列化サポート メソッドなど、通常の意味での Python マジック メソッドも含まれていることに気づくかもしれません。もちろん、これらは必要に応じてオプションです。このクラスを通常の Python クラスとして扱うだけで、プログラムに必要なだけメソッドや属性を追加できます。
もちろん、User クラスに関して注意を払うことができないのは、Base から継承する必要があるということです。この Base は、declarative_base() を通じて生成したクラスであり、それを通じて SQLAlchemy Declarative システムに管理させることができます。これらのマッピング クラスとデータベース テーブルを操作します。
実際、継承された Base クラスを含め、すべてのクラスは Python の新しいスタイル クラスである必要があります。新しいスタイル クラスの詳細については、Python マニュアルを参照してください。
User マッピング クラスは宣言型システムを通じて正常に構築されるため、クラシック定義で導入された Table() 記述などの関連する定義情報が得られます。これには、テーブルにマップされたクラス (User 自体) も含まれます。 User.__table__ を通じてテーブルの説明を表示できます。
コードをコピーします