Récupération de requêtes SQL dans SQLAlchemy avec des valeurs réelles
Lors de l'utilisation de SQLAlchemy, il peut être utile d'imprimer les requêtes SQL réelles en cours d'exécution, y compris les valeurs spécifiques utilisées, plutôt que les paramètres de liaison abstraits.
Voici comment y parvenir dans SQLAlchemy :
<code class="python">print(str(statement))</code>
Cette approche simple fonctionne à la fois pour les objets ORM Query et select() ou d'autres types d'instructions. Si vous souhaitez obtenir la requête telle que compilée dans un dialecte ou un moteur spécifique, vous pouvez transmettre les arguments appropriés à compile() :
<code class="python">print(statement.compile(someengine)) print(statement.compile(dialect=postgresql.dialect()))</code>
Lorsque vous utilisez des objets ORM Query, accédez d'abord à l'accesseur .statement pour accédez à la méthode compile() :
<code class="python">statement = query.statement print(statement.compile(someengine))</code>
Dans les cas où vous devez intégrer des paramètres liés dans la chaîne finale, SQLAlchemy a une prise en charge limitée pour cela. Vous pouvez utiliser l'indicateur 'literal_binds' lors de l'appel de compile() :
<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Cependant, cela ne fonctionne que pour les types simples comme les entiers et les chaînes. Pour les types personnalisés, vous devrez utiliser un TypeDecorator avec une méthode TypeDecorator.process_literal_param pour fournir un formatage personnalisé :
<code class="python">print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>
Cette approche permet le rendu en ligne des types personnalisés dans la chaîne de requête SQL résultante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!