Maison  >  Article  >  base de données  >  Comment utiliser les instructions préparées avec MySQL en Python ?

Comment utiliser les instructions préparées avec MySQL en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 07:48:01217parcourir

How to Use Prepared Statements with MySQL in 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!

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