SQLAlchemy ORM - Utilizzo di Query
Tutte le istruzioni SELECT generate da SQLAlchemy ORM sono costruite dall'oggetto Query. Fornisce un'interfaccia generativa, quindi le chiamate successive restituiscono un nuovo oggetto Query, una copia del primo con criteri e opzioni aggiuntivi ad esso associati.
Gli oggetti query vengono inizialmente generati utilizzando il metodo query () della sessione come segue:
q = session.query(mapped class)
La seguente dichiarazione è anche equivalente alla dichiarazione di cui sopra -
q = Query(mappedClass, session)
L'oggetto query ha il metodo all () che restituisce un gruppo di risultati sotto forma di elenco di oggetti. Se lo eseguiamo sulla tabella dei nostri clienti -
result = session.query(Customers).all()
Questa istruzione è effettivamente equivalente alla seguente espressione SQL:
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
L'oggetto risultato può essere attraversato utilizzando il ciclo For come di seguito per ottenere tutti i record nella tabella dei clienti sottostante. Ecco il codice completo per visualizzare tutti i record nella tabella Clienti -
from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Customers(Base):
__tablename__ = 'customers'
id = Column(Integer, primary_key = True)
name = Column(String)
address = Column(String)
email = Column(String)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind = engine)
session = Session()
result = session.query(Customers).all()
for row in result:
print ("Name: ",row.name, "Address:",row.address, "Email:",row.email)
La console Python mostra l'elenco dei record come di seguito:
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]
Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]
Name: Rajender Nath Address: Sector 40, Gurgaon Email: [email protected]
Name: S.M.Krishna Address: Budhwar Peth, Pune Email: [email protected]
L'oggetto Query ha anche i seguenti metodi utili:
Sr.No. | Metodo e descrizione |
---|---|
1 | add_columns() Aggiunge una o più espressioni di colonna all'elenco delle colonne dei risultati da restituire. |
2 | add_entity() Aggiunge un'entità mappata all'elenco delle colonne dei risultati da restituire. |
3 | count() Restituisce un conteggio delle righe che questa query restituirebbe. |
4 | delete() Esegue una query di eliminazione in blocco. Elimina le righe corrispondenti a questa query dal database. |
5 | distinct() Applica una clausola DISTINCT alla query e restituisce la query appena risultante. |
6 | filter() Applica il criterio di filtro specificato a una copia di questa query, utilizzando espressioni SQL. |
7 | first() Restituisce il primo risultato di questa query o Nessuno se il risultato non contiene alcuna riga. |
8 | get() Restituisce un'istanza basata sull'identificatore di chiave primaria fornito fornendo accesso diretto alla mappa di identità della sessione proprietaria. |
9 | group_by() Applica uno o più criteri GROUP BY alla query e restituisce la query appena risultante |
10 | join() Crea un SQL JOIN in base al criterio di questo oggetto Query e si applica in modo generativo, restituendo la Query appena risultante. |
11 | one() Restituisce esattamente un risultato o solleva un'eccezione. |
12 | order_by() Applica uno o più criteri ORDER BY alla query e restituisce la query appena risultante. |
13 | update() Esegue una query di aggiornamento in blocco e aggiorna le righe corrispondenti a questa query nel database. |