Maison > développement back-end > Tutoriel Python > Comment obtenir la requête SQL réelle exécutée dans SQLAlchemy ?

Comment obtenir la requête SQL réelle exécutée dans SQLAlchemy ?

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

How to Obtain the Actual SQL Query Executed in SQLAlchemy?

Impression de requêtes SQL réelles dans SQLAlchemy

L'exécution de requêtes SQL dans SQLAlchemy implique la liaison de paramètres pour empêcher les attaques par injection SQL. Cependant, obtenir la requête SQL réelle, y compris les valeurs, peut être difficile.

Solution générale

La méthode la plus simple pour récupérer la requête SQL sous forme de chaîne consiste à utiliser la fonction str() :

<code class="python">print(str(statement))  # for both ORM Query and SQL statements</code>
Copier après la connexion

Implémentation des paramètres liés

Par défaut, SQLAlchemy lie les paramètres pour des raisons de sécurité. Vous pouvez supprimer ce comportement à l'aide de l'indicateur literal_binds dans compile_kwargs :

<code class="python">from sqlalchemy.dialects import postgresql

print(
    statement.compile(compile_kwargs={"literal_binds": True})
)</code>
Copier après la connexion

Notez que la liaison littérale n'est prise en charge que pour les types de base tels que les entiers et les chaînes.

Personnalisation de la conversion des paramètres

Si vous devez convertir des types plus complexes, vous pouvez créer un TypeDecorator personnalisé avec une méthode process_literal_param :

<code class="python">class MyFancyType(TypeDecorator):
    impl = Integer

    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

Cela produira une requête comme :

<code class="sql">SELECT mytable.x
FROM mytable
WHERE mytable.x > my_fancy_formatting(5)</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