ホームページ >バックエンド開発 >Python チュートリアル >Python での ORM フレームワーク SQLAlchemy の詳細な説明
SQLAlchemy は、データベース操作のための高レベルの抽象化を提供する強力な Python SQL ライブラリです。 SQLAlchemy の ORM (オブジェクト リレーショナル マッピング) フレームワークを使用すると、複雑な SQL ステートメントを記述したり、データベース接続やトランザクションなどの基礎となる詳細を処理したりすることなく、プログラム内でオブジェクト指向の方法でデータベースを簡単に操作できます。この記事では、SQLAlchemy の ORM フレームワークを詳しく紹介し、それを使用してさまざまなデータベース操作を完了する方法を探ります。
1. SQLAlchemy のインストールと設定
SQLAlchemy の使用を開始する前に、まず SQLAlchemy をインストールする必要があります。 pip や conda などのパッケージ マネージャーを使用して SQLAlchemy をインストールできます。
pip install sqlalchemy
インストールが完了すると、Python プログラムで SQLAlchemy ライブラリを使用できるようになります。使用を開始する前に、プログラム内の SQLAlchemy エンジンとメタデータを初期化する必要があります。これは、次のコードを使用して実現できます:
from sqlalchemy import create_engine, MetaData engine = create_engine('数据库连接字符串') metadata = MetaData(bind=engine)
このうち、「データベース接続文字列」は実際のデータベース接続文字列に置き換える必要があります。たとえば、:
engine = create_engine('mysql+pymysql://root:password@localhost/test')
MySQL データベースが使用されます。ここでは、ユーザー名は root、パスワードは passwd、接続されたデータベースの名前は test です。
2. データベース テーブルと ORM マッピングを定義する
SQLAlchemy の ORM フレームワークを使用して操作する前に、最初にデータベース テーブルの構造を定義する必要があります。これは、Python クラスを定義することで実現できます。例:
from sqlalchemy import Column, Integer, String class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer) email = Column(String(120), unique=True) def __repr__(self): return f"<User(name='{self.name}', age={self.age}, email='{self.email}')>"
この例では、「users」という名前のデータベース テーブルに対応する User クラスを定義します。このテーブルには、ID、名前、年齢、電子メールの 4 つのフィールドが含まれています。これらの属性を Python クラスで定義することにより、マッピング関係が確立され、テーブル内の各列が Python クラスの属性に対応します。 __repr__ 関数を使用すると、オブジェクトのプロパティを簡単に出力できます。
User クラスとデータベース テーブルをマップするには、データ テーブルの Metadata オブジェクトも定義する必要があります。このオブジェクトには、表現、列名、データ型、制約など、データ テーブルの構造を説明する情報が含まれています。同時に、sessionmaker 関数を使用して、データベース セッション オブジェクトを作成するためのセッション ファクトリを作成する必要もあります。
from sqlalchemy.orm import sessionmaker Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)
ここでは、create_all() メソッドを使用して、Base クラスから継承するすべてのクラスをマップします。 。 Session オブジェクトは、データベース セッションを作成するために使用されるファクトリ関数であり、データベース エンジンにバインドする必要があります。
3. データベース操作に ORM を使用する
データ テーブルのクラスとメタデータ オブジェクトを定義した後、データベース操作に ORM の使用を開始できます。 SQLAlchemy の ORM は、CRUD 操作とクエリ操作に使用できる一連の API を提供します。これらの操作については、以下で個別に紹介します。
ORM で最も一般的に使用される操作の 1 つは、データの追加です。これは、データ テーブル オブジェクトを作成し、セッションに追加することで実現できます。
from sqlalchemy.orm import Session user = User(name='Alice', age=20, email='alice@example.com') session = Session() session.add(user) session.commit()
この例では、User オブジェクトを作成し、セッションに追加します。最後に、commit() メソッドを呼び出してデータがデータベースに送信されます。
ORM フレームワークを使用してデータを変更する。rollback() メソッドと commit() メソッドを使用してトランザクション操作を実装できます。
session = Session() user = session.query(User).filter_by(name='Alice').first() if user: user.age = 21 session.rollback() session.commit()
この例では、まずセッション オブジェクトの query() メソッドを使用して、データベースから「Alice」という名前のユーザー レコードを取得します。次に、ユーザーの年齢属性が変更され、rollback() メソッドが呼び出されます。この操作により、変更後にデータベース内で発生したすべての更新操作が元に戻されます。最後に、commit() メソッドを呼び出すと、変更されたデータがデータベースに送信されます。
ORM フレームワークを使用してデータを削除することも非常に簡単で、削除するデータをセッションから直接削除できます。
session = Session() user = session.query(User).filter_by(name='Alice').first() if user: session.delete(user) session.commit()
この例では、最初に query() メソッドを使用して、データベースから「Alice」という名前のユーザー レコードを取得します。次に、このレコードをセッションから削除し、commit() メソッドを通じてデータベースに削除操作を送信します。
query() メソッドを使用してクエリ操作を実行し、filter_by() メソッドを使用してクエリ条件を指定できます。クエリが完了したら、all() メソッドを使用してすべての結果を取得するか、first() メソッドを使用して最初の結果を取得できます。
session = Session() users = session.query(User).all() for user in users: print(user)
この例では、まず query() メソッドを使用して User テーブルからすべてのレコードを取得します。次に、すべての結果を反復処理して属性を出力します。
単純なクエリに加えて、order_by() メソッドを使用して特定の列で並べ替えたり、limit() メソッドを使用して返される結果の数を制限したりするなど、いくつかの高度なクエリ メソッドを使用することもできます。 。
users = session.query(User).order_by(User.age.desc()).limit(10).all()
ここでは、User テーブルから年齢列の降順で上位 10 件のレコードを取得します。
4. 概要
SQLAlchemy は強力な Python SQL ライブラリであり、その ORM フレームワークはデータベースを操作するための高レベルの抽象化を提供します。クラス、メタデータ オブジェクト、セッション ファクトリを定義することで、さまざまなデータベース操作を簡単に実装できます。 SQLAlchemy は、CRUD 操作、クエリ操作、トランザクション操作などに使用できる豊富な API を多数提供します。同時に、さまざまなデータベースエンジンとデータタイプもサポートし、さまざまなニーズに応えます。
以上がPython での ORM フレームワーク SQLAlchemy の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。