Python SQLAlchemy – フィルターを使用した func.count
この記事では、Python で PostgreSQL データベースに対して SQLAlchemy の count 関数を使用してフィルター操作を実行する方法を説明します。
フィルター操作によるカウントは、さまざまな関数を使用したさまざまな方法で実行されます。このような数学的演算はデータベースに依存します。 PostgreSQLではカウントはcount()という関数で行い、フィルタ操作はfilter()で行います。 SQLAlchemy では、SUM、MIN、MAX などの汎用関数は、func 属性を使用して従来の SQL 関数と同様に呼び出されます。
SQLAlchemy で使用される一般的な関数には、count、cube、current_date、current_time、max、min、mode などがあります。
使用法: func.count()。 func.group_by()、func.max()
デモンストレーション用のテーブルの作成
SQLAlchemy パッケージから必要な関数をインポートします。以下に示すように、create_engine() 関数を使用して PostgreSQL データベースとの接続を確立し、列 book_id と book_price を持つ book という名前のテーブルを作成します。図に示すように、insert() 関数と value() 関数を使用してテーブルにレコードを挿入します。
Python3
# import necessary packages> import> sqlalchemy> from> sqlalchemy> import> create_engine, MetaData, Table,> Column, Numeric, Integer, VARCHAR> from> sqlalchemy.engine> import> result> > # establish connections> engine> => create_engine(> > 'database+ dialect://username:password@host:port/databasename '> )> > # initialize the Metadata Object> meta> => MetaData(bind> => engine)> MetaData.reflect(meta)> > # create a table schema> books> => Table(> > 'books'> , meta,> > Column(> 'bookId'> , Integer, primary_key> => True> ),> > Column(> 'book_price'> , Numeric),> > Column(> 'genre'> , VARCHAR),> > Column(> 'book_name'> , VARCHAR)> )> > meta.create_all(engine)> # insert records into the table> statement1> => books.insert().values(bookId> => 1> , book_price> => 12.2> ,> > genre> => 'fiction'> ,> > book_name> => 'Old age'> )> statement2> => books.insert().values(bookId> => 2> , book_price> => 13.2> ,> > genre> => 'non-fiction'> ,> > book_name> => 'Saturn rings'> )> statement3> => books.insert().values(bookId> => 3> , book_price> => 121.6> ,> > genre> => 'fiction'> ,> > book_name> => 'Supernova'> )> statement4> => books.insert().values(bookId> => 4> , book_price> => 100> ,> > genre> => 'non-fiction'> ,> > book_name> => 'History of the world'> )> statement5> => books.insert().values(bookId> => 5> , book_price> => 1112.2> ,> > genre> => 'fiction'> ,> > book_name> => 'Sun city'> )> > # execute the insert records statement> engine.execute(statement1)> engine.execute(statement2)> engine.execute(statement3)> engine.execute(statement4)> engine.execute(statement5)> |
出力:
サンプルテーブル
SQLAlchemy での GroupBy と count の実装
groupby 関数の作成手順は、以下に示す従来の SQL クエリの手順とは少し異なります。
sqlalchemy.select([
テーブル名.c.列名、
sqlalchemy.func.count(テーブル名.c.列名)
]).group_by(テーブル名.c.列名).filter(テーブル名.c.列名の値)
データベースへの接続中に初期化されたメタデータ オブジェクトからブックス テーブルを取得します。 SQL クエリをexecute() 関数に渡し、fetchall() 関数を使用してすべての結果を取得します。 for ループを使用して結果を反復処理します。
以下のクエリは、価格が Rs を超える、さまざまなジャンルの書籍の数を返します。 50.
Python3
# Get the `books` table from the Metadata object> BOOKS> => meta.tables[> 'books'> ]> > # SQLAlchemy Query to GROUP BY and filter function> query> => sqlalchemy.select([> > BOOKS.c.genre,> > sqlalchemy.func.count(BOOKS.c.genre)> ]).group_by(BOOKS.c.genre).> filter> (BOOKS.c.book_price>>> 50.0> )> > # Fetch all the records> result> => engine.execute(query).fetchall()> > # View the records> for> record> in> result:> > print> (> '
'> , record)> |
出力:
カウントおよびフィルター関数の出力