SQLAlchemy - Découpage text en argument de la commande execute

Bonjour,
je voudrais savoir s’il y a une règle (et je pense qu’il y en a une) sur la façon de découper le text passé en argument à la commande execute de SQLAlchemy.

Si j’écris ceci, ça fonctionne :

rq = text ("SELECT * FROM (SELECT CustomerId, Total  FROM 'invoices' WHERE InvoiceId BETWEEN 1 AND 20) AS A "
           "LEFT JOIN (SELECT CustomerId, Total FROM 'invoices' WHERE InvoiceId BETWEEN 21 AND 40) AS B ON A.CustomerId=B.CustomerId")

En revanche si j’écris ceci, j’ai une erreur :

rq = text ("SELECT * FROM (SELECT CustomerId, Total  FROM 'invoices' WHERE InvoiceId BETWEEN 1 AND 20) AS A "
           "LEFT JOIN (SELECT CustomerId, Total FROM 'invoices' WHERE InvoiceId BETWEEN 21 AND 40) AS B"
           "ON A.CustomerId=B.CustomerId")

Et si je coupe en plein milieu d’une parenthèse, pas de soucis :

rq = text ("SELECT * FROM (SELECT CustomerId, Total  FROM 'invoices' WHERE InvoiceId BETWEEN 1 AND 20) AS A "
           "LEFT JOIN (SELECT CustomerId, Total FROM 'invoices'"
           "WHERE InvoiceId BETWEEN 21 AND 40) AS B ON A.CustomerId=B.CustomerId")

Du coup je ne comprends pas bien la logique.

Quelqu’un aurait un tips ?

Bonjour @3461 ,

Dans votre deuxième requête, il manque simplement un espace entre AS B et la clause ON A.CustomerId=B.CustomerId, ce qui génère l’erreur.

rq = text ("SELECT * FROM (SELECT CustomerId, Total  FROM 'invoices' WHERE InvoiceId BETWEEN 1 AND 20) AS A "
           "LEFT JOIN (SELECT CustomerId, Total FROM 'invoices' WHERE InvoiceId BETWEEN 21 AND 40) AS B "  <- ajouter un espace ici
           "ON A.CustomerId=B.CustomerId")

Un conseil : vous pouvez vérifier votre requête rq après l’avoir instanciée en affichant la valeur de rq.text

Génial, merci pour le tips.
C’était subtil visuellement mais effectivement ça tombe sous le sens.
Merci encore