Maison >base de données >tutoriel mysql >Puis-je exécuter des requêtes SQL paramétrées stockées dans une variable en Python ?
Exécuter des requêtes SQL paramétrées à partir de variables en Python
Pour éviter l'injection SQL, lors de l'exécution de requêtes SQL paramétrées en Python, il est généralement recommandé d'utiliser le format suivant :
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)</code>
Cependant, il convient d'explorer la question de savoir s'il est possible de stocker la requête dans une variable et de l'exécuter plus tard.
execute()
Signature de la méthode
Pour comprendre pourquoi cela pourrait ne pas fonctionner, nous devons vérifier la signature de la execute()
méthode :
<code class="language-python">cursor.execute(self, query, args=None)</code>
Cette méthode nécessite jusqu'à trois paramètres : une requête et une séquence ou une carte de paramètres facultative.
Essayez d'exécuter une requête à partir d'une variable
Si nous essayons d'exécuter une requête stockée dans la variable sql
, par exemple :
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql)</code>
Nous obtiendrons une erreur car sql
contient quatre paramètres, dont la variable elle-même.
Requêtes et paramètres séparés
Pour exécuter une requête à partir d'une variable, on peut séparer la requête et les paramètres :
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" args = var1, var2, var3 cursor.execute(sql, args)</code>
Dans ce cas, sql
contient la requête et args
contient les paramètres. En spécifiant execute(sql, args)
, nous pouvons exécuter avec succès la requête paramétrée.
Une autre façon
Alternativement, nous pouvons utiliser l'approche plus intuitive à deux variables :
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql, (var1, var2, var3))</code>
Cette approche élimine le besoin de créer des variables distinctes pour les requêtes et les paramètres.
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!