Maison >base de données >tutoriel mysql >Comment puis-je révéler le SQL brut et compilé à partir d'une requête SQLAlchemy ?

Comment puis-je révéler le SQL brut et compilé à partir d'une requête SQLAlchemy ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-07 11:06:41716parcourir

How Can I Reveal the Raw, Compiled SQL from a SQLAlchemy Query?

Révéler le SQL brut et compilé derrière une expression SQLAlchemy

Lorsque vous travaillez avec un objet de requête SQLAlchemy, il peut être souhaitable d'obtenir le réel , instruction SQL compilée pour obtenir des informations sur le fonctionnement de la base de données sous-jacente. Cependant, récupérer cette requête brute avec des paramètres entièrement liés peut s'avérer difficile.

Une approche consiste à exploiter l'argument literal_binds dans compile_kwargs lors de la compilation de l'instruction de requête. Comme illustré ci-dessous :

print(q.statement.compile(compile_kwargs={"literal_binds": True}))

Cette méthode génère la requête SQL compilée avec des paramètres directement insérés, supprimant ainsi le besoin d'espaces réservés tels que %s. Cependant, il est crucial de noter que cette technique est limitée aux types simples comme les entiers et les chaînes. Si un bindparam() sans valeur prédéfinie est utilisé, il ne sera pas inclus dans la sortie.

La documentation souligne la prudence lors de l'utilisation de cette approche avec une entrée non fiable. Il déconseille d'utiliser cette technique avec les données fournies par l'utilisateur, car les mécanismes de SQLAlchemy pour forcer les valeurs Python en chaînes SQL manquent de sécurité contre les entrées non fiables. Au lieu de cela, il préconise fortement l'utilisation de paramètres liés pour l'invocation par programme d'instructions SQL non DDL.

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