Maison > base de données > tutoriel mysql > Comment puis-je formater correctement les chaînes Python pour les requêtes SQL LIKE avec des caractères génériques ?

Comment puis-je formater correctement les chaînes Python pour les requêtes SQL LIKE avec des caractères génériques ?

Barbara Streisand
Libérer: 2024-12-19 21:32:13
original
529 Les gens l'ont consulté

How Can I Correctly Format Python Strings for SQL LIKE Queries with Wildcards?

Formatage de chaîne Python avec des caractères génériques SQL et LIKE

Vous rencontrez des difficultés lors de l'intégration d'instructions SQL avec des caractères génériques dans votre code Python ? Cet article fournira une solution aux défis courants rencontrés lors du formatage des chaînes Python pour les requêtes impliquant le mot-clé LIKE et des caractères génériques.

Problème :

Utilisation du mot-clé LIKE avec des caractères génériques. dans une instruction SQL utilisant MySQLdb en Python s'avère problématique. Diverses tentatives de formatage de la chaîne à l'aide de la méthode de formatage de Python entraînent des erreurs dues à la validation de la valeur de Python ou à l'exécution de la requête de MySQLdb.

Tentatives incorrectes :

# Attempt 1: Value error due to unsupported escape sequence
"SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\
  tag ON user.id = tag.userId WHERE user.username LIKE '%%s%'" % (query)

# Attempt 2: Returns same error as Attempt 1
"SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\
  tag ON user.id = tag.userId WHERE user.username LIKE '\%%s\%'" % (query)

# Attempt 3: Error from MySQLdb due to insufficient arguments in format string
like = "LIKE '%" + str(query) + "%'"
totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\
  tag ON user.id = tag.userId WHERE user.username " + like

# Attempt 4: Returns same error as Attempt 3
like = "LIKE '\%" + str(query) + "\%'"
totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\
  tag ON user.id = tag.userId WHERE user.username " + like
Copier après la connexion

Solution :

Pour résoudre ces problèmes de formatage et garantir que l'instruction SQL s'exécute correctement, utilisez ce qui suit approche :

curs.execute("""SELECT tag.userId, count(user.id) as totalRows 
                  FROM user 
            INNER JOIN tag ON user.id = tag.userId 
                 WHERE user.username LIKE %s""", ('%' + query + '%',))
Copier après la connexion

Dans cet exemple, deux arguments sont passés à la méthodeexecute(). Le premier argument est une chaîne SQL formatée avec un espace réservé pour l'expression générique. Le deuxième argument est un tuple contenant l'expression générique préfixée et suffixée par un signe de pourcentage. Cela garantit que le caractère générique est appliqué aux deux extrémités de la chaîne de recherche.

En utilisant cette méthode, vous éliminez le risque d'attaques par injection SQL et assurez-vous que la requête s'exécute sans aucune erreur de formatage.

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