Maison > Article > base de données > Comment utiliser les instructions préparées avec MySQL en Python ?
Utilisation d'instructions préparées avec MySQL en Python : une explication détaillée
Comprendre la syntaxe
Les instructions préparées dans MySQL offrent un moyen plus efficace et plus sécurisé d'exécuter des requêtes en séparant la phase de préparation des requêtes de la phase d'exécution. Lorsque vous utilisez des instructions préparées, il est important de suivre la syntaxe correcte pour éviter les erreurs potentielles.
Explication de l'erreur
Dans votre extrait de code, vous rencontrez une erreur car vous utilisez la syntaxe incorrecte pour les instructions préparées. Voici une description du problème :
sql = "PREPARE stmt FROM ' INSERT INTO {} (date, time, tag, power) VALUES (?, ?, ?, ?)'".format(self.db_scan_table) self.cursor.execute(sql)
Cette ligne tente de préparer une instruction nommée "stmt" à l'aide d'une chaîne SQL. Cependant, le module MySQLdb de Python ne prend pas directement en charge les commandes "PREPARE" et "EXECUTE".
Solution utilisant MySQLdb
Pour utiliser des instructions préparées avec MySQLdb, vous devez pour utiliser une approche légèrement différente :
sql = ('INSERT INTO {} (date, time, tag, power) VALUES (%s, %s, %s, %s)'.format(self.db_scan_table))
Cette ligne crée une chaîne SQL avec des espaces réservés (caractères (?") pour les valeurs à insérer.
self.cursor.execute(sql, (d, t, tag, power))
Cette ligne exécute le instruction préparée en utilisant les valeurs spécifiées dans le tuple. MySQLdb prépare automatiquement l'instruction et gère l'exécution.
Utilisation de MySQL Connector/Python
Une façon plus moderne et efficace d'utiliser les instructions préparées avec MySQL en Python consiste à utiliser Connecteur MySQL/Python. Il offre une option explicite « prepare=True » dans la fabrique de curseurs :
cursor = conn.cursor(prepared=True) sql = ('INSERT INTO {} (date, time, tag, power) VALUES (%s, %s, %s, %s)'.format(self.db_scan_table)) cursor.execute(sql, (d, t, tag, power))
Cette approche offre un meilleur contrôle sur les instructions préparées et est recommandée pour améliorer les performances et la sécurité.
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!