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")
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"})
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})
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()
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)
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!