2009-08-27 4 views
2

Ok donc j'ai ce mode:liaison à l'aide GQL dans Google App Engine

class Posts(db.Model): 
    rand1 = db.FloatProperty() 
    #other models here 

et ce contrôleur:

class Random(webapp.RequestHandler): 
    def get(self):  
     rand2 = random.random() 
     posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > :rand2 ORDER BY rand LIMIT 1") 
     #Assigning values for Django templating 
     template_values = { 
      'posts_query': posts_query, 
      #test purposes 
      'rand2': rand2, 
      } 

     path = os.path.join(os.path.dirname(__file__), 'templates/random.html') 
     self.response.out.write(template.render(path, template_values)) 

Alors, quand une entité est ajouté un flotteur aléatoire est généré (0- 1) et puis quand j'ai besoin de saisir une entité aléatoire, je veux être en mesure d'utiliser une simple requête SELECT. erreurs Il avec:

BadArgumentError('Missing named arguments for bind, requires argument rand2',) 

Maintenant, cela fonctionne si je vais:

posts_query = db.GqlQuery("SELECT * FROM Posts WHERE rand1 > 1 ORDER BY rand LIMIT 1") 

donc clairement ma requête est faux; comment peut-on utiliser une variable dans une instruction WHERE: S

Répondre

3

Suppléant:

"...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1") 

avec:

"...WHERE rand1 > :rand2 ORDER BY rand LIMIT 1", rand2=rand2) 

Ou

"...WHERE rand1 > :1 ORDER BY rand LIMIT 1", rand2) 

Voir pour plus d'informations: "The Gql query class"

Le plus drôle est que je viens d'apprendre cela il y a environ 2 heures: P

+0

Yay, grâce - c'est le fixe: P Bien qu'il soit fait: OÙ RAND1>: 1 ORDER BY LIMITE RAND1 1" , RAND2 J'ai accidentellement eu 'rand' au lieu de 'rand1', au cas où d'autres se demandaient et avaient besoin d'aide. –

Questions connexes