J'ai un objet de requête SQLAlchemy et je veux obtenir le texte de l'instruction SQL compilée, avec tous ses paramètres liés (par exemple, aucune %s
ou d'autres variables en attente d'être liées par le compilateur d'instructions ou le moteur de dialecte MySQLdb, etc.).
L'appel str()
sur la requête révèle quelque chose comme ceci:
SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
J'ai essayé de chercher dans query._params mais c'est un dict vide. J'ai écrit mon propre compilateur en utilisant cet exemple du sqlalchemy.ext.compiler.compiles
décorateur, mais même la déclaration contient toujours %s
où je veux des données.
Je ne peux pas vraiment comprendre quand mes paramètres sont mélangés pour créer la requête; lors de l'examen de l'objet de requête, il s'agit toujours d'un dictionnaire vide (bien que la requête s'exécute correctement et que le moteur l'imprime lorsque vous activez la journalisation d'écho).
Je commence à recevoir le message que SQLAlchemy ne veut pas que je connaisse la requête sous-jacente, car elle rompt la nature générale de l'interface de l'API d'expression avec toutes les différentes DB-API. Cela ne me dérange pas si la requête est exécutée avant que je découvre ce que c'était; Je veux juste savoir!