SQLAlchemy ORM - SQL textuel

Auparavant, le SQL textuel utilisant la fonction text () a été expliqué du point de vue du langage d'expression de base de SQLAlchemy. Nous allons maintenant en discuter du point de vue ORM.

Les chaînes littérales peuvent être utilisées de manière flexible avec l'objet Query en spécifiant leur utilisation avec la construction text (). La plupart des méthodes applicables l'acceptent. Par exemple, filter () et order_by ().

Dans l'exemple ci-dessous, la méthode filter () traduit la chaîne «id <3» en WHERE id <3

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

L'expression SQL brute générée montre la conversion du filtre en clause WHERE avec le code illustré ci-dessous -

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

À partir de nos exemples de données dans la table Clients, deux lignes seront sélectionnées et la colonne de nom sera imprimée comme suit -

Ravi Kumar
Komal Pande

Pour spécifier les paramètres de liaison avec SQL basé sur une chaîne, utilisez deux points et pour spécifier les valeurs, utilisez la méthode params ().

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

Le SQL effectif affiché sur la console Python sera comme indiqué ci-dessous -

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 = ?

Pour utiliser une instruction entièrement basée sur une chaîne, une construction text () représentant une instruction complète peut être passée à from_statement ().

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

Le résultat du code ci-dessus sera une instruction SELECT de base comme indiqué ci-dessous -

SELECT * FROM customers

De toute évidence, tous les enregistrements de la table des clients seront sélectionnés.

La construction text () nous permet de lier son SQL textuel aux expressions de colonne Core ou ORM mappées en position. Nous pouvons y parvenir en passant des expressions de colonne comme arguments de position à la méthode TextClause.columns ().

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

Les colonnes id et name de toutes les lignes seront sélectionnées même si le moteur SQLite exécute l'expression suivante générée par le code ci-dessus montre toutes les colonnes de la méthode text () -

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