2010-05-26 5 views
4

je reçois un message d'erreur sur cette requêteErreur lors de l'exécution requête

query = "select count(*) from pgns_game where raw_moves = %s" 
params = ('a',) 
total_rows = self.model.objects.raw(query, params) 

et il dit

InvalidQuery('Raw query must include the primary key') 

je manque clairement quelque chose mais je ne sais pas quoi. Des idées?

+0

Dit ici dans les docs (http://docs.djangoproject.com/fr/1.2/topics/db/sql/#deferring-model-fields): "Il n'y a qu'un seul champ que vous ne pouvez pas omettre -le champ clé primaire Django utilise la clé primaire pour identifier les instances du modèle, il doit donc toujours être inclus dans une requête brute Une exception InvalidQuery sera levée si vous oubliez d'inclure la clé primaire. " – bernie

Répondre

16

self.model.objects.raw() s'attend à ce que le résultat de la requête contienne des clés primaires du modèle self.model, afin qu'il puisse les transformer en une liste d'objets pour le résultat de la fonction.

Ce que vous avez vraiment besoin de faire est execute the SQL directly, and not through a manager. Votre code sera probablement comme ceci:

from django.db import connection 
cursor = connection.cursor() 
cursor.execute("select count(*) from pgns_game where raw_moves = %s", ['a']) 
total_rows = cursor.fetchone() 

Je ne l'ai pas essayé moi-même, cependant.

+0

Merci, je ne le savais pas. – iJK