Maison > base de données > tutoriel mysql > Comment transmettre des paramètres de manière sûre et efficace dans « connection.execute() » de SQLAlchemy ?

Comment transmettre des paramètres de manière sûre et efficace dans « connection.execute() » de SQLAlchemy ?

Mary-Kate Olsen
Libérer: 2025-01-03 00:01:40
original
506 Les gens l'ont consulté

How to Safely and Effectively Pass Parameters in SQLAlchemy's `connection.execute()`?

Transmettre efficacement les paramètres dans connection.execute de SQLAlchemy

Dans SQLAlchemy, la méthode connection.execute() permet aux utilisateurs d'exécuter des instructions SQL et de récupérer résultats efficacement. Cependant, lorsqu'il s'agit de transmettre des paramètres à l'instruction SQL, il est important de le faire de manière sûre et efficace.

Comprendre le problème

Comme vous l'avez mentionné, vous Nous utilisons actuellement le formatage SQL pour transmettre des paramètres à vos chaînes SQL, ce qui implique l'utilisation de la méthode format() sur l'instruction SQL. Bien que cette méthode puisse être pratique, elle ne constitue pas une bonne pratique et peut conduire à des vulnérabilités d’injection SQL. Au lieu de cela, SQLAlchemy fournit plusieurs mécanismes pour transmettre en toute sécurité et efficacement les paramètres aux instructions SQL.

Solution utilisant le SQL textuel

Une approche recommandée consiste à utiliser SQLAlchemy.sql.text () pour créer un objet d'instruction SQL textuel. Cet objet prend en charge les paramètres de liaison et peut aider à prévenir les attaques par injection SQL. Voici un exemple :

from sqlalchemy.sql import text
sql = text("SELECT * FROM users WHERE name = :name")
Copier après la connexion

Vous pouvez ensuite utiliser la méthode execute() avec l'objet SQL textuel résultant et spécifier les valeurs des paramètres à l'aide d'arguments de mots-clés :

connection.execute(sql, {"name": "John"})
Copier après la connexion

Solution Utilisation d'une fonction paramétrée

Une autre approche consiste à créer une fonction paramétrée à l'aide du Fonction sqlalchemy.sql.expression.bindparam(). Cette fonction vous permet de créer des espaces réservés pour les valeurs de paramètres que vous pourrez transmettre ultérieurement :

from sqlalchemy.sql.expression import bindparam
params = [
    bindparam("name", type_=String),
    bindparam("age", type_=Integer)
]

sql = sqlalchemy.text("SELECT * FROM users WHERE name = :name AND age = :age")
connection.execute(sql, {"name": "John", "age": 30})
Copier après la connexion

Passer des paramètres à votre fonction personnalisée

Pour adapter votre __sql_to_data() fonction pour accepter les paramètres, vous pouvez utiliser un dictionnaire pour stocker les valeurs des paramètres :

def __sql_to_data(sql, params):
    connection = engine.connect()
    try:
        rows = connection.execute(sql, params)
        # ... (Remaining code)
    finally:
        connection.close()
Copier après la connexion

Vous pouvez ensuite invoquer cette fonction avec un dictionnaire de valeurs de paramètres, telles que :

data = {"user_id": 3}
__sql_to_data(sql_get_profile, data)
Copier après la connexion

Conclusion

En utilisant les approches recommandées, vous pouvez transmettre en toute sécurité et efficacement des paramètres aux instructions SQL dans SQLAlchemy , améliorant la sécurité et la maintenabilité de vos applications de base de données.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal