Maison >base de données >tutoriel mysql >Comment puis-je utiliser en toute sécurité des variables dans les requêtes SQL avec la fonction « cursor.execute() » de Python ?

Comment puis-je utiliser en toute sécurité des variables dans les requêtes SQL avec la fonction « cursor.execute() » de Python ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 08:20:43151parcourir

How Can I Safely Use Variables in SQL Queries with Python's `cursor.execute()` Function?

Utilisation de variables en Python pour les requêtes SQL paramétrées

En Python, les requêtes SQL paramétrées sont cruciales pour empêcher l'injection SQL. Bien que l'approche recommandée consiste à transmettre les variables directement à la fonction d'exécution, dans certains cas, il est également souhaitable d'utiliser des variables pour représenter la requête elle-même.

Requête en tant que variable : erreur de syntaxe

Essayer d'exécuter une requête SQL directement à partir d'une variable (comme indiqué ci-dessous) entraîne une erreur de syntaxe :

<code>sql = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(sql)</code>

Exécuter la fonction

cursor.executeLa signature de la fonction précise qu'elle accepte jusqu'à trois paramètres :

<code>cursor.execute(self, query, args=None)</code>

Par conséquent, il est incorrect de transmettre une variable contenant une requête et des paramètres en tant que paramètre unique.

Solution

Pour résoudre ce problème, deux solutions possibles :

Tuple développé avec des paramètres :

<code>sql_and_params = "INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3
cursor.execute(*sql_and_params)</code>

Cependant, cette approche peut provoquer des erreurs si le tuple comporte plus de trois éléments.

Requête et paramètres séparés :

Vous pouvez également séparer la requête et les paramètres :

<code>sql = "INSERT INTO table VALUES (%s, %s, %s)"
args = var1, var2, var3
cursor.execute(sql, args)</code>

Cette méthode est plus détaillée, mais garantit que le nombre correct de paramètres est transmis à la fonction d'exécution.

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