logo

Python SQLAlchemy – func.count met filter

In dit artikel gaan we zien hoe we een filterbewerking met de count-functie in SQLAlchemy kunnen uitvoeren tegen een PostgreSQL-database in Python

Tellen met filterbewerkingen wordt op verschillende manieren uitgevoerd met verschillende functies. Dergelijke soorten wiskundige bewerkingen zijn database-afhankelijk. In PostgreSQL wordt de telling uitgevoerd met behulp van een functie genaamd count(), en wordt de filterbewerking uitgevoerd met behulp van filter(). In SQLAlchemy worden generieke functies zoals SUM, MIN en MAX aangeroepen zoals conventionele SQL-functies met behulp van het func-attribuut.

Enkele veelgebruikte functies in SQLAlchemy zijn count, cube, current_date, current_time, max, min, mode etc.



Gebruik: func.count(). func.group_by(), func.max()

Tabel maken voor demonstratie

Importeer de benodigde functies uit het SQLAlchemy-pakket. Breng verbinding tot stand met de PostgreSQL-database met behulp van de functie create_engine() zoals hieronder weergegeven, maak een tabel met de naam boeken met de kolommen book_id en book_price. Voeg een record in de tabellen in met behulp van de functies insert() en waarden(), zoals weergegeven.

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)>

>

>

Uitgang:

Voorbeeld tafel

Implementatie van GroupBy en tellen in SQLAlchemy

Het schrijven van een groupby-functie heeft een iets andere procedure dan die van een conventionele SQL-query, die hieronder wordt weergegeven

lijst in Java

sqlalchemy.select([

Tabelnaam.c.kolomnaam,

sqlalchemy.func.count(Tabelnaam.c.kolomnaam)

]).group_by(Tabelnaam.c.kolomnaam).filter(Tabelnaam.c.kolomnaamwaarde)

Haal de boekentabel op uit het Metadata-object dat is geïnitialiseerd tijdens het verbinden met de database. Geef de SQL-query door aan de functie execute() en verkrijg alle resultaten met de functie fetchall(). Gebruik een for-lus om de resultaten te doorlopen.

is gelijk aan tekenreeks in Java

De onderstaande zoekopdracht retourneert het aantal boeken in verschillende genres waarvan de prijzen hoger zijn dan 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)>

>

>

Uitgang:

De uitvoer van de functie Tellen en filteren