Maison >développement back-end >Tutoriel Python >Comment afficher les requêtes SQL réelles dans SQLAlchemy ?

Comment afficher les requêtes SQL réelles dans SQLAlchemy ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-18 13:20:03962parcourir

How to Display Actual SQL Queries in SQLAlchemy?

Impression des requêtes SQL réelles dans SQLAlchemy

Dans SQLAlchemy, il est crucial de comprendre comment afficher le SQL brut qui correspond à vos opérations de base de données . Ceci est essentiel pour le dépannage, le débogage et l'optimisation de la communication avec la base de données de votre application.

Approche générale

Dans la plupart des cas, vous pouvez facilement afficher la représentation sous forme de chaîne SQL d'une instruction. ou interrogez avec :

<code class="python">print(str(statement))</code>

Cela s'applique à la fois aux requêtes ORM et aux expressions select() brutes.

Compilation dans un dialecte spécifique

Si vous devez afficher le SQL compilé pour un dialecte ou un moteur spécifique, vous pouvez utiliser la méthode compile() :

<code class="python">print(statement.compile(someengine))</code>

ou sans moteur :

<code class="python">from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))</code>

Inlining Paramètres liés

Le comportement par défaut dans SQLAlchemy consiste à utiliser des paramètres de liaison dans les chaînes SQL, garantissant ainsi la sécurité en empêchant les attaques par injection SQL. Pour contourner les paramètres liés et les valeurs réelles en ligne, utilisez l'indicateur literal_binds dans compile_kwargs :

<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>

Pour les types personnalisés non pris en charge par cette approche, implémentez un TypeDecorator avec une méthode process_literal_param pour garantir le rendu en ligne :

<code class="python">class MyFancyType(TypeDecorator):
    def process_literal_param(self, value, dialect):
        return "my_fancy_formatting(%s)" % value

print(
    tab.select().where(tab.c.x > 5).compile(
        compile_kwargs={"literal_binds": True})
)</code>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn