Maison > développement back-end > Tutoriel Python > Comment obtenir la vraie requête SQL dans SQLAlchemy ?

Comment obtenir la vraie requête SQL dans SQLAlchemy ?

Patricia Arquette
Libérer: 2024-10-18 13:26:02
original
778 Les gens l'ont consulté

How to Obtain the True SQL Query in SQLAlchemy?

SQLAlchemy : dévoiler la véritable requête

Lorsque vous travaillez avec SQLAlchemy, il peut être utile d'inspecter les requêtes SQL réelles en cours d'exécution. Bien que SQLAlchemy s'appuie généralement sur des paramètres de liaison, il existe des moyens de générer les instructions SQL correspondantes, y compris les valeurs réelles.

Solution générale

Dans la plupart des cas, vous pouvez facilement obtenez la représentation sous forme de chaîne SQL d'une instruction ou d'une requête SQLAlchemy :

<code class="python">import sqlalchemy as sa
print(str(statement))</code>
Copier après la connexion

Cela fonctionne à la fois pour les requêtes ORM et select() ou d'autres instructions. Si nécessaire, vous pouvez compiler l'instruction dans un dialecte ou un moteur spécifique :

<code class="python">print(statement.compile(someengine))</code>
Copier après la connexion

ou sans spécifier de moteur :

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

Inlining Bound Parameters

Pour inclure les valeurs réelles au lieu des paramètres de liaison dans la chaîne SQL, SQLAlchemy fournit une prise en charge limitée via l'indicateur 'literal_binds' dans compile_kwargs :

<code class="python">from sqlalchemy import table, column, select
t = table('t', column('x'))
s = select([t]).where(t.c.x == 5)
print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Copier après la connexion

Cependant, cette approche ne fonctionne que pour les types de base et ne peut pas gérer les paramètres de liaison sans valeurs pré-attribuées. Pour les types personnalisés, vous pouvez implémenter un TypeDecorator avec une méthode process_literal_param :

<code class="python">class MyFancyType(TypeDecorator):
    def process_literal_param(self, value, dialect):
        return "my_fancy_formatting(%s)" % value</code>
Copier après la connexion

Cela vous permet de personnaliser le rendu des valeurs en fonction de vos besoins spécifiques.

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