SQLAlchemy ORM - przy użyciu zapytania

Wszystkie instrukcje SELECT generowane przez SQLAlchemy ORM są konstruowane przez obiekt Query. Zapewnia interfejs generatywny, stąd kolejne wywołania zwracają nowy obiekt Query, kopię poprzedniego z dodatkowymi kryteriami i powiązanymi z nim opcjami.

Obiekty zapytania są początkowo generowane przy użyciu metody query () w sesji w następujący sposób -

q = session.query(mapped class)

Poniższe stwierdzenie jest również równoważne powyższemu stwierdzeniu -

q = Query(mappedClass, session)

Obiekt zapytania posiada metodę all (), która zwraca zestaw wyników w postaci listy obiektów. Jeśli wykonamy to na stole naszych klientów -

result = session.query(Customers).all()

Ta instrukcja jest w rzeczywistości równoważna z następującym wyrażeniem SQL -

SELECT customers.id 
AS customers_id, customers.name 
AS customers_name, customers.address 
AS customers_address, customers.email 
AS customers_email
FROM customers

Przez obiekt wynikowy można przejść za pomocą pętli For, jak poniżej, aby uzyskać wszystkie rekordy w podstawowej tabeli klientów. Oto pełny kod do wyświetlania wszystkich rekordów w tabeli Klienci -

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)

Konsola Pythona pokazuje listę rekordów jak poniżej -

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]

Obiekt Query ma również następujące przydatne metody -

Sr.No. Metoda i opis
1

add_columns()

Dodaje jedno lub więcej wyrażeń kolumnowych do listy zwracanych kolumn wynikowych.

2

add_entity()

Dodaje mapowaną jednostkę do listy zwracanych kolumn wynikowych.

3

count()

Zwraca liczbę wierszy, które zwróciłoby to zapytanie.

4

delete()

Wykonuje zapytanie do usuwania zbiorczego. Usuwa z bazy danych wiersze dopasowane przez to zapytanie.

5

distinct()

Stosuje klauzulę DISTINCT do zapytania i zwraca nowo powstałe zapytanie.

6

filter()

Stosuje dane kryterium filtrowania do kopii tego zapytania, używając wyrażeń SQL.

7

first()

Zwraca pierwszy wynik tego zapytania lub None, jeśli wynik nie zawiera żadnego wiersza.

8

get()

Zwraca instancję na podstawie podanego identyfikatora klucza podstawowego, zapewniając bezpośredni dostęp do mapy tożsamości sesji będącej właścicielem.

9

group_by()

Stosuje do zapytania jedno lub więcej kryterium GROUP BY i zwraca nowo wynikowe zapytanie

10

join()

Tworzy JOIN SQL na podstawie kryterium tego obiektu zapytania i stosuje się je generatywnie, zwracając nowo wynikowe zapytanie.

11

one()

Zwraca dokładnie jeden wynik lub zgłasza wyjątek.

12

order_by()

Stosuje do zapytania jedno lub więcej kryteriów ORDER BY i zwraca nowo wynikowe zapytanie.

13

update()

Wykonuje kwerendę aktualizującą zbiorczo i aktualizuje wiersze pasujące do tego zapytania w bazie danych.