Utilisation d'instructions préparées avec MySQL en Python
Lorsqu'ils tentent d'utiliser SQL avec des instructions préparées en Python via une utilisation directe de SQL, les utilisateurs peuvent rencontrer des erreurs tel que "Vous avez une erreur dans votre syntaxe SQL". Cela peut se produire lors de l'exécution d'instructions telles que :
sql = "PREPARE stmt FROM ' INSERT INTO {} (date, time, tag, power) VALUES (?, ?, ?, ?)'".format(self.db_scan_table) self.cursor.execute(sql)
suivi de :
sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power) self.cursor.execute(sql)
Pour résoudre ce problème, il est crucial de comprendre que Python ne dispose pas d'un mécanisme intrinsèque pour les instructions préparées. Au lieu de cela, on peut exploiter la méthode execute() de l'objet curseur pour préparer et exécuter des instructions de manière dynamique.
Par exemple :
sql = ('INSERT INTO {} (date, time, tag, power) VALUES ' '(%s, %s, %s, %s)'.format(self.db_scan_table)) self.cursor.execute(sql, (d, t, tag, power))
Cette approche élimine le besoin de formatage de chaîne supplémentaire, car le module MySQLdb gère automatiquement la préparation et l'exécution des instructions.
De plus, il convient de considérer que si la boucle mentionnée implique uniquement l'insertion de données, un seul appel à .execute_many() avec une séquence de tuples comme second L'argument pourrait remplacer la boucle entière, améliorant ainsi l'efficacité.
De plus, Connector/Python de MySQL offre une alternative supérieure avec son option prepare=True dans .cursor(). Cela permet une préparation explicite des instructions (en utilisant le protocole binaire efficace), tout en permettant l'utilisation d'un autre curseur pour les instructions qu'il vaut mieux ne pas préparer.
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!