ホームページ  >  記事  >  バックエンド開発  >  Python ORM フレームワーク SQLAlchemy 学習メモ - マッピング クラスの使用例とセッション セッションの紹介

Python ORM フレームワーク SQLAlchemy 学習メモ - マッピング クラスの使用例とセッション セッションの紹介

WBOY
WBOYオリジナル
2016-06-16 08:43:491242ブラウズ

1. マッピング クラス

のインスタンスを作成します。

データベース エンティティ テーブルを Python クラスにマッピングする方法を以前に紹介しました。ここで、このクラスのインスタンス (インスタンス) を作成することができます。例として、ユーザーを作成してみましょう。オブジェクト:

コードをコピー コードは次のとおりです:

>>> , 'Ed Jones', ' edspassword')
>>>> ed_user.id)
'None'

は、なぜ ed_user なのか疑問に思うかもしれません。 id は None 値になります。まず、id 属性は __init__() コンストラクターを渡さないため、デフォルトでは、ORM の以前に定義された id 列 (Column) により None 値が生成されます。 ORM は、マッピングされたすべてのテーブル列のクラス属性を作成し、これらの属性は Python 言語 (記述子) メカニズムの記述子を介して渡されます。したがって、これらのプロパティの使用には、変更の追跡や、必要に応じてデータベースから新しいデータを自動的にロードするなどの追加の動作が含まれます。つまり、変更や読み取りなど、これらのプロパティを使用すると、内部のプロセスがトリガーされます。 ORM の一連のアクション。

ちょっと待ってください。id 属性の値が None である理由がまだ説明されていません。あはは、実際のところ、現在はデータベースにデータを挿入していません。通常、データベースに挿入するときに、一意性を確保するために主キー属性は重複しない値を自動的に生成します。オブジェクトを永続化していないため (いわゆる永続化とは、マッピング関係に従ってオブジェクト データをデータベースに保存することです)、ここでの id 値は None です。心配しないでください。後でデータを永続化する方法を紹介するときに、新しい自動生成された ID を確認できるようになります。
次のステップは、怠惰になって、怠惰なテクニックを導入することです:-)


マッピングクラスの構築メソッド__init__()を定義しない場合、何か悪影響はありますか?まったくそうではありません。SQLAlchemy はこれを考慮します。私たちが怠惰で、前の User クラスを次のように定義すると、

コードをコピーします

コードは次のようになります。 class User(Base): __tablename__ = 'users' id = Column(Integer, Primary_key=True)
name = Column(String)
フルネーム = Column(String )
パスワード = Column(String)

User は Base を継承するため (Base の定義については前回の記事を参照)、宣言型システムによって管理されます。このクラスにはコンストラクターがなかったので、非常に使いやすいコンストラクターが追加されました。もちろん、このクラスが提供するコンストラクターは、独自に定義したコンストラクターのように位置ベースのパラメーター アクセスを使用することはできません。例:


コードをコピー
コードは次のとおりです:u1 = User(name='ed', fullname= 'Ed Jones', password='foobar')id も渡すことができます。一般的に、このタイプの主キーは次によって自動的に維持されます。システムに値を割り当てる必要はありません。

2. セッション
を作成して使用します。

この時点で、「すべての準備が整いました。必要なのは東風だけです」と言えます。公式文書の言葉を借りれば、「データベースとの対話を開始する準備ができています」(We're)。これでデータベースとの通信を開始する準備ができました)。 ORM操作ハンドル(Handle)をセッション(Session)と呼びます。セッションを使用するには、まずセッションを構成する必要があります。セッションを構成するコード ステートメントは、エンジンを作成する create_engine() のコード ステートメントと同じコード レベルである必要があります (単にまとめただけです)。 たとえば、create_engine() を使用して、最初に Engine という名前のエンジンを作成し (エンジン作成コードについては、私の最初の記事を参照してください)、次に、sessionmaker() ファクトリ関数を使用して Session クラスを作成し、たとえば、既存のエンジンの場合、コードは次のとおりです:

コードをコピー

コードは次のとおりです: >> ;> from sqlalchemy.orm import sessionmaker >>> Session = sessionmaker(bind=engine)
セッションを作成するコードが同じレベルにない場合はどうなるでしょうかエンジンを作成しますか? たとえば、最初に Sessionmaker() で Session クラスを作成し、次に create_engine() でエンジンを作成したところですが、セッションとエンジンをバインドする機会はまだありますか?もちろん、Session クラスのconfigure メソッドを使用して、次のようにエンジン バインディングを構成できます。


コードをコピー
コードは次のとおりです。 🎜> Session = sessionmaker()# Engine = create_engine(...) エンジンの作成 Session.configure(bind=engine) # エンジンはすでに作成されているはずです
ここで sessionmaker() ファクトリを通じて作成された Session クラスは、以前に作成したエンジンにバインドされている必要がありますが、セッションを開始するには、この Session クラスをインスタンス化する必要があります:
コードをコピー コードは次のとおりです:
> session = Session()
ここにセッションがありますエンジンによって維持されるデータベース接続プールは、変更がコミットされるかセッション オブジェクトが閉じられるまで、メモリ内にマップされたデータを維持します。
ここでセッションの確立についての説明は終わりました。次に、実際の ORM データベースのクエリ部分について説明します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。