logo

Python SQLAlchemy – funz.count con filtro

In questo articolo, vedremo come eseguire l'operazione di filtro con la funzione di conteggio in SQLAlchemy rispetto a un database PostgreSQL in Python

Il conteggio con operazioni di filtro viene eseguito in metodi diversi utilizzando funzioni diverse. Tali tipi di operazioni matematiche dipendono dal database. In PostgreSQL, il conteggio viene eseguito utilizzando una funzione chiamata count() e l'operazione di filtro viene eseguita utilizzando filter(). In SQLAlchemy, funzioni generiche come SUM, MIN, MAX vengono richiamate come funzioni SQL convenzionali utilizzando l'attributo func.



Alcune funzioni comuni utilizzate in SQLAlchemy sono count, cube, current_date, current_time, max, min, mode ecc.

Utilizzo: funz.count(). funz.group_by(), funz.max()

Creazione di una tabella per la dimostrazione

Importa le funzioni necessarie dal pacchetto SQLAlchemy. Stabilisci una connessione con il database PostgreSQL utilizzando la funzione create_engine() come mostrato di seguito, crea una tabella chiamata libri con le colonne book_id e book_price. Inserisci il record nelle tabelle utilizzando la funzione insert() evalues() come mostrato.



Python3

stringa Java in numero intero






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

esempio di sottostringa Java

>

>

Produzione:

Tabella campione

Implementazione di GroupBy e conteggio in SQLAlchemy

La scrittura di una funzione groupby ha una procedura leggermente diversa da quella di una query SQL convenzionale mostrata di seguito

formica contro esperto

sqlalchemy.select([

nometabella.c.nome_colonna,

sqlalchemy.func.count(Nometabella.c.nome_colonna)

]).group_by(nometabella.c.nome_colonna).filter(valore nometabella.c.nome_colonna)

Ottieni la tabella dei libri dall'oggetto Metadata inizializzato durante la connessione al database. Passa la query SQL alla funzioneexecute() e ottieni tutti i risultati utilizzando la funzione fetchall(). Utilizzare un ciclo for per scorrere i risultati.

La query seguente restituisce il conteggio dei libri di generi diversi i cui prezzi sono superiori a Rs. 50.

Python3


panda iterrows



collezioni java

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

>

>

Produzione:

L'output della funzione Conteggio e filtro