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

Comment obtenir la vraie requête SQL dans SQLAlchemy ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-18 13:26:02669parcourir

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>

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>

ou sans spécifier de moteur :

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

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>

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>

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!

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