2010-06-23 4 views
27
COMME

Je cherche à utiliser une requête avec paramétrés COMME bibliothèque SQLite Python comme ci-dessous:substitution de paramètres Python SQLite avec des caractères génériques dans

self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type)) 

mais? à l'intérieur du caractère générique n'est pas en cours d'évaluation me laissant avec cette erreur:

"sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied." 

J'ai essayé aussi d'utiliser la version marquée de l'interrogation avec:

like '%:searchstr%' et dans la liste ayant {"searchstr":searchstr...

mais quand Je fais que la requête s'exécute mais ne renvoie jamais de résultats, même si manuellement mettre "like '%a%'"... retourner des centaines de résultats comme il se doit

des suggestions s'il vous plaît?

Répondre

53

Les guillemets protègent soit ? ou :name d'être pris comme un espace-titulaire - ils sont pris littéralement. Vous devez placer les signes de pourcentage autour de la chaîne que vous transmettez et utiliser l'espace réservé vide sans guillemets. I.e. .:

self.cursor.execute(
    "select string from stringtable where string like ? and type = ?", 
    ('%'+searchstr+'%', type)) 

Notez que ni ? est entre guillemets - et c'est exactement comme il devrait être pour eux d'être considérés comme des espaces réservés.

+0

merci beaucoup! ça l'a réparé! – atcuno

+0

@huntler, toujours heureux d'aider! –

+0

Est-ce que Python a une analyse PHP des variables entre guillemets? par exemple. '" $ var "' en PHP analyserait la valeur de '$ var' entre guillemets. –

Questions connexes