La liaison de paramètres à l'aide GQL dans Google App Engine

voix
2

Ok donc j'ai ce mode:

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 je dois saisir une entité aléatoire que je veux être en mesure d'utiliser simplement une simple requête SELECT. erreurs de ce dernier:

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)

Il apparaît donc clairement ma requête est faux; comment peut-on utiliser une variable dans une déclaration où: S

Créé 27/08/2009 à 04:28
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Remplacer:

 "...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: « La classe de requête gql »

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

Créé 27/08/2009 à 04:40
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more