ホームページ  >  記事  >  バックエンド開発  >  Python ORM を使用して複雑なクエリを処理する技術

Python ORM を使用して複雑なクエリを処理する技術

王林
王林転載
2024-03-18 09:19:021219ブラウズ

Python ORM 处理复杂查询的艺术

python オブジェクト リレーショナル マッピング (ORM) Framework は、データベース## 内の関係をマッピングできます。 # データは Python オブジェクトにシームレスにマッピングされ、データベースとの対話が簡素化されます。最も複雑なクエリでも、ORM を使用すると簡単かつ効率的に実行できます。

1.ネストされたクエリ:

ネストされたクエリを使用すると、1 つのクエリの結果を別のクエリへの入力として使用できます。 ORM では、ネストされたフィルターを使用してこれを実現できます。たとえば、

filter() メソッドを使用してサブクエリをネストし、特定の条件に一致するレコードを検索できます。 ######例:######

sqlalchemyインポートと_から、列 sqlalchemy.orm からセッションメーカーをインポート、関係 # ORM セッションを作成する セッション = セッションメーカー() セッション = セッション() # Book テーブルと Author テーブル クラスブック(ベース): id = 列(整数、primary_key=True) タイトル = 列(文字列) author_id = Column(整数,ForeignKey("authors.id")) # 著者テーブル クラス作成者(ベース): id = 列(整数、primary_key=True) 名前 = 列(文字列) # ネストされたクエリを使用して、著者が「John」という名前の本のタイトルをすべて検索します query = session.query(Book.title).filter(Book.author_id.in_( session.query(著者.id).filter(著者.name == "ジョン") ))

2. 結合クエリ:

結合クエリは、複数のテーブルのレコードを結合します。 ORM では、

join() メソッドを使用してこれを実現できます。たとえば、join()

メソッドを使用して 2 つのテーブルを結合し、特定の著者の書籍を検索できます。

######例:###### sqlalchemyインポートと_から、列 sqlalchemy.orm からセッションメーカーをインポート、関係 # ORM セッションを作成する セッション = セッションメーカー() セッション = セッション() # Book テーブルと Author テーブル クラスブック(ベース): id = 列(整数、primary_key=True) タイトル = 列(文字列) author_id = Column(整数,ForeignKey("authors.id")) # 著者テーブル クラス作成者(ベース): id = 列(整数、primary_key=True) 名前 = 列(文字列) # 結合クエリを使用して、著者名が「John」である書籍タイトルをすべて検索します query = session.query(Book.title).join(Book.author).filter(Author.name == "John") 3. 集計関数:

集計関数は、合計、平均、最大値の検索など、複数の値を 1 つの値に結合します。 ORM では、sum()

avg()

max() などの集計関数を使用してこれを実現できます。たとえば、sum()

関数を使用して、特定の著者による書籍の合計数を計算できます。

######例:###### sqlalchemyインポートと_から、列 sqlalchemy.orm からセッションメーカーをインポート、関係 # ORM セッションを作成する セッション = セッションメーカー() セッション = セッション() # Book テーブルと Author テーブル クラスブック(ベース): id = 列(整数、primary_key=True) タイトル = 列(文字列) author_id = Column(整数,ForeignKey("authors.id")) # 著者テーブル クラス作成者(ベース): id = 列(整数、primary_key=True) 名前 = 列(文字列) # 集計関数を使用して特定の著者による書籍の総数を計算する query = session.query(著者名).group_by(著者).having(func.count(Book.id) > 1) 4. 動的クエリ: 動的クエリを使用すると、実行時にクエリを構築できます。 ORM では、dynamic()

関数を使用してこれを実現できます。たとえば、

dynamic() 関数を使用して、特定のフィルター条件を含むクエリを作成できます。 ######例:######

from sqlalchemy import and_、列、リテラル sqlalchemy.orm からセッションメーカーをインポート、関係 # ORM セッションを作成する セッション = セッションメーカー() セッション = セッション() # Book テーブルと Author テーブル クラスブック(ベース): id = 列(整数、primary_key=True) タイトル = 列(文字列) author_id = Column(整数,ForeignKey("authors.id")) # 著者テーブル クラス作成者(ベース): id = 列(整数、primary_key=True) 名前 = 列(文字列) # 動的クエリを使用して、特定のフィルター条件を含むクエリを作成します query = session.query(Book).filter(literal(True).in_( session.query(1).filter(Book.title == "本のタイトル") )) 開発者

は、ORM のこれらの機能を効果的に活用することで、SQL ステートメントを直接記述することなく、複雑で効率的なクエリを構築できます。これにより、データベースの対話が簡素化され、可読性と保守性が向上します。

以上がPython ORM を使用して複雑なクエリを処理する技術の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlsjlt.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。