Récupération du SQL brut et compilé à partir d'expressions SQLAlchemy
Dans SQLAlchemy, obtenir la requête SQL brute et compilée à partir d'un objet d'expression peut être un défi . Bien que l'API d'expression offre une interface pratique, elle masque le code SQL sous-jacent.
Vous avez du mal à localiser les paramètres
Vous avez inspecté le dictionnaire query._params mais vous avez trouvé il est vide, malgré l'exécution réussie de la requête. En effet, SQLAlchemy conserve intentionnellement les paramètres encapsulés dans l'objet de requête. Ce faisant, il garantit la compatibilité avec diverses API DB.
Utilisation de la liaison littérale
Cependant, la documentation SQLAlchemy propose une solution de contournement grâce à l'utilisation de literal_binds :
print(q.statement.compile(compile_kwargs={"literal_binds": True}))
Cette approche vous permet d'imprimer l'instruction de requête avec ses paramètres inclus. Cependant, il ne convient qu'aux types de base (par exemple, entiers, chaînes) et ne prend pas en charge bindparam() sans valeur prédéfinie.
Avertissement de sécurité
La documentation déconseille fortement d'utiliser cette technique avec une entrée non fiable. Les mécanismes de coercition de type de SQLAlchemy ne sont pas infaillibles et pourraient conduire à des failles de sécurité.
Conclusion
Bien qu'il ne soit pas directement exposé par défaut, le SQL brut et compilé peut être récupéré à partir de SQLAlchemy. expressions utilisant l’argument de mot-clé literal_binds. Cependant, il est crucial de faire preuve de prudence lorsque vous travaillez avec des données non fiables.
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!