2010-09-04 4 views
1

J'ai essayé la requête suivante avec Django,requêtes de filtrage dans Django avec sqlite

def search(search_text): 
    q = Info.objects.filter(title__contains=str(search_text)) 
    print q.query 

La requête qui s'imprimé est

SELECT "d"."id", "d"."foo" FROM "d_info" WHERE "d_info"."title" LIKE %hello% ESCAPE '\' 

La requête échoue parce que le texte qui suit LIKE ne avoir des citations autour d'elle. La requête réussit quand je lance la requête sur l'invite SQL avec des guillemets autour du texte qui suit LIKE comme ci-dessous

SELECT "d"."id", "d"."foo" FROM "d_info" WHERE "d_info"."title" LIKE '%hello%' ESCAPE '\' 

Comment puis-je obtenir Django pour ajouter les guillemets autour de la search_text pour que la requête réussit?

J'utilise Djanog avec sqlite3

Répondre

0

affichage mon commentaire ci-dessus comme la réponse

Il tourne si la requête fonctionne au sein de Django, mais quand on lui demande d'imprimer la requête et si je copie la requête imprimée et l'exécuter dans un shell mysql ou shell sqlite, ça ne marche pas. Django imprime probablement la requête erronée

1

J'ai essayé avec Postgresql 8.3. La requête est générée sans guillemets. Cependant, l'exécution du filtre renvoie un jeu de requête valide avec des instances attendues. Pouvez-vous essayer d'exécuter

q = Info.objects.filter(title__contains=str(search_text)) 
print q.count() 

et de voir si cela fonctionne?

+0

Ce n'est pas différent de ce que j'ai. Vouliez-vous dire autre chose? – rampr

+0

Je voulais demander, avez-vous exécuté la requête derrière le jeu de questions (paresseux)? 'Imprimer q.count()' vous indiquera si la requête a bien démarré. –

+0

Désolé j'ai manqué la 2ème déclaration, il s'avère que la requête fonctionne dans Django, mais lorsqu'on lui demande d'imprimer la requête et si j'exécute la même requête dans un shell mysql ou un shell sqlite, ça ne marche pas. Django imprime probablement la requête erronée. – rampr