2013-08-05 4 views
1

J'ai rencontré un problème que je ne sais pas résoudre.Citations et variables Python et Mysql

J'ai cette ligne:

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST   ('"The.New.York.Times"' IN BOOLEAN MODE);") 

Si je lance:

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST ('"The.New.York.Times"'  IN BOOLEAN MODE);") 

dans la console MySQL, cela fonctionne. Mais je suppose que python n'aime pas les citations '"The.New.York.Times"'. Comment puis-je résoudre cela?

Et aussi, comment est-ce que je ferais en python cette chaîne de recherche une variable? Quelque chose du genre

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST ('"%s"' IN BOOLEAN MODE);, var1") 

?

Répondre

1

Afin d'éviter les injections sql et obtenir Escaping appropriée, vous devez passer des variables de requête comme second paramètre à execute:

param = '"The.New.York.Times"' 
cur.execute("SELECT * FROM predb WHERE Match(name) AGAINST (%s IN BOOLEAN MODE)", (param,)) 
+0

Ce code ne fonctionne pas, si j'ai enlevé le « » de% s il a travaillé, merci pour l'aide !! – tsjk

+0

Ok, super. Je pensais que vous aviez besoin de "" là – alecxe

+0

En général, vous n'avez pas besoin du point-virgule à la fin de l'instruction, mais il vaut également la peine de lire la [FAQ de l'API de base de données Python] (http://wiki.python.org/ moin/DbApiFaq). (Quel paramtype est supporté peut dépendre du driver DB.) – Bruno