Question

Je veux vérifier si un courriel est dans ma base de données en Appengine, et sinon: entrez dans le magasin de données.

Je suis nouveau à python. Pourquoi est-ce simple code ne fonctionne pas? (façon même s'il y a une meilleure façon / plus efficace d'écrire cela, s'il vous plaît me dire)

(je reçois l'erreur: BadArgumentError: arguments de position non utilisée [1])

class EmailAdd(webapp.RequestHandler):
def get(self):
    query = db.GqlQuery("SELECT * FROM EmailDatabase WHERE emailaddress=':1'", self.request.get('emailaddress'))
    result = query.get()
    if result is None:
        newemail = EmailDatabase()
        newemail.emailaddress = self.request.get('emailaddress')
        newemail.put()

Et pour référence, ceci est ma classe db:

class EmailDatabase(db.Model):
     emailaddress = db.StringProperty()
     date = db.DateTimeProperty(auto_now_add=True)
Était-ce utile?

La solution

Vous n'avez pas besoin d'utiliser des guillemets lors de la liaison d'un paramètre à la requête:

query = db.GqlQuery("SELECT * FROM EmailDatabase WHERE emailaddress = :1", self.request.get('emailaddress'))

Dans le cas contraire, il lira comme une chaîne et fait retourner uniquement les objets qui ont :1 que leur valeur emailaddress.

En outre, assurez-vous de valider l'entrée utilisateur (self.request.get('emailaddress')) avant de l'insérer dans la requête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top