Maison  >  Article  >  base de données  >  Pourquoi est-ce que j'obtiens une « erreur de syntaxe SQL » lors de l'utilisation d'instructions préparées en Python avec MySQL ?

Pourquoi est-ce que j'obtiens une « erreur de syntaxe SQL » lors de l'utilisation d'instructions préparées en Python avec MySQL ?

DDD
DDDoriginal
2024-11-07 16:51:03866parcourir

Why Am I Getting a

Utilisation d'instructions préparées avec MySQL en Python : clarifier la syntaxe et éviter les erreurs

Vous rencontrez une erreur lors de l'utilisation d'instructions préparées avec MySQL dans Python, avec le message "'Vous avez une erreur dans votre syntaxe SQL'". Examinons le code que vous avez fourni et identifions le problème.

Le code que vous avez utilisé pour préparer l'instruction semble correct, mais l'exécution ultérieure de l'instruction contient l'erreur. Plus précisément, le code dans la boucle semble utiliser des paramètres avec une syntaxe différente de celle attendue par l'instruction préparée.

sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power)

Dans l'exemple fourni par la réponse, une approche plus efficace utilisant le module MySQLdb de Python est suggérée :

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))

Ici, les espaces réservés pour les valeurs (%s) sont spécifiés directement dans la chaîne de requête SQL, et les valeurs réelles sont transmises sous forme de tuple dans l'appel d'exécution. Cela élimine le besoin de formatage de chaîne lors de la phase d'exécution, ce qui était probablement à l'origine de l'erreur de syntaxe dans votre code.

Vous pouvez également utiliser le propre connecteur/Python de MySQL avec l'option prepare=True dans le curseur(). factory, ce qui est plus efficace et explicite que l'utilisation des instructions PREPARE et EXECUTE.

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