SQLAlchemy ORM - Textual SQL

Zuvor wurde Text-SQL mit der Funktion text () aus der Perspektive der zentralen Ausdruckssprache von SQLAlchemy erläutert. Jetzt werden wir es aus ORM-Sicht diskutieren.

Literalzeichenfolgen können flexibel mit dem Abfrageobjekt verwendet werden, indem ihre Verwendung mit dem Konstrukt text () angegeben wird. Die meisten anwendbaren Methoden akzeptieren dies. Zum Beispiel filter () und order_by ().

Im folgenden Beispiel übersetzt die filter () -Methode die Zeichenfolge "id <3" in die WHERE-ID <3

from sqlalchemy import text
for cust in session.query(Customers).filter(text("id<3")):
   print(cust.name)

Der generierte SQL-Rohausdruck zeigt die Konvertierung des Filters in die WHERE-Klausel mit dem unten dargestellten Code -

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

Aus unseren Beispieldaten in der Kundentabelle werden zwei Zeilen ausgewählt und die Namensspalte wie folgt gedruckt:

Ravi Kumar
Komal Pande

Verwenden Sie einen Doppelpunkt, um Bindungsparameter mit stringbasiertem SQL anzugeben, und verwenden Sie die Methode params (), um die Werte anzugeben.

cust = session.query(Customers).filter(text("id = :value")).params(value = 1).one()

Das effektive SQL, das auf der Python-Konsole angezeigt wird, ist wie folgt:

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

Um eine vollständig auf Zeichenfolgen basierende Anweisung zu verwenden, kann ein text () -Konstrukt, das eine vollständige Anweisung darstellt, an from_statement () übergeben werden.

session.query(Customers).from_statement(text("SELECT * FROM customers")).all()

Das Ergebnis des obigen Codes ist eine grundlegende SELECT-Anweisung wie unten angegeben -

SELECT * FROM customers

Natürlich werden alle Datensätze in der Kundentabelle ausgewählt.

Das text () -Konstrukt ermöglicht es uns, sein textuelles SQL mit Core- oder ORM-zugeordneten Spaltenausdrücken positionell zu verknüpfen. Dies können wir erreichen, indem wir Spaltenausdrücke als Positionsargumente an die TextClause.columns () -Methode übergeben.

stmt = text("SELECT name, id, name, address, email FROM customers")
stmt = stmt.columns(Customers.id, Customers.name)
session.query(Customers.id, Customers.name).from_statement(stmt).all()

Die ID- und Namensspalten aller Zeilen werden ausgewählt, obwohl die SQLite-Engine den folgenden Ausdruck ausführt, der durch den obigen Code generiert wurde. Alle Spalten in der text () -Methode werden angezeigt.

SELECT name, id, name, address, email FROM customers