Maison >base de données >tutoriel mysql >Comment puis-je utiliser des instructions préparées avec MySQL en Python pour améliorer les performances des requêtes et empêcher l'injection SQL ?

Comment puis-je utiliser des instructions préparées avec MySQL en Python pour améliorer les performances des requêtes et empêcher l'injection SQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-11 13:32:10720parcourir

How Can I Use Prepared Statements with MySQL in Python to Improve Query Performance and Prevent SQL Injection?

Utilisation d'instructions préparées avec MySQL en Python

Lorsque vous travaillez avec des opérations de base de données, les instructions préparées peuvent améliorer considérablement les performances des requêtes. En Python, les instructions préparées peuvent être utilisées avec MySQL.

Format de requête paramétrée en Python

En Python, vous pouvez créer une requête paramétrée en utilisant le format suivant :

cursor.execute("SELECT FROM tablename WHERE fieldname = %s", [value])

Le marqueur de paramètre %s agit comme un espace réservé pour la valeur réelle. Différents pilotes de base de données peuvent utiliser différents styles de paramétrage. Pour déterminer le style approprié pour votre pilote, vous pouvez importer le module du pilote et imprimer son attribut paramstyle.

Styles de paramétrage pris en charge

Selon la proposition d'amélioration de Python (PEP- 249), les styles de paramétrage suivants sont pris en charge :

  • 'qmark' : style de point d'interrogation (par exemple, ...WHERE name=?)
  • 'numeric' : numérique, style positionnel (par exemple, ...WHERE name=:1)
  • 'named' : style nommé ( par exemple, ...WHERE name=:name)
  • 'format' : codes de format d'impression ANSI C (par exemple, ...WHERE name=%s)
  • 'pyformat' : codes de format étendu Python (par exemple, ...WHERE name=%(name)s)

Exemple d'utilisation

Pour démontrer l'utilisation d'instructions préparées, considérons l'exemple suivant :

import mysql.connector

db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="database_name"
)

cursor = db.cursor()

# Create a parameterized query
parameterized_query = "SELECT * FROM users WHERE name = %s"

# Execute the query with the provided parameter
cursor.execute(parameterized_query, ("John Doe",))

# Fetch the results
results = cursor.fetchall()

# Close the cursor and connection
cursor.close()
db.close()

Utilisation de requêtes paramétrées Les requêtes garantissent que votre code est protégé contre les attaques par injection SQL et améliorent les performances des requêtes en permettant à la base de données de préparer le plan de requête à l'avance.

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