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