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

Mary-Kate Olsen
Libérer: 2024-10-18 13:20:03
original
806 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

ou sans moteur :

<code class="python">from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!