Domanda

voglio verificare se un email è nel mio database in AppEngine, e se non: poi immetterlo nella datastore.

Sono nuovo di pitone. Perché questo semplice codice non funziona? (anche se v'è un / modo più efficiente modo migliore per scrivere questo, la prego di dirmi)

(ottengo l'errore: BadArgumentError: argomenti posizionali non utilizzati [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()

E per riferimento, questo è la mia classe db:

class EmailDatabase(db.Model):
     emailaddress = db.StringProperty()
     date = db.DateTimeProperty(auto_now_add=True)
È stato utile?

Soluzione

Non è necessario utilizzare le virgolette quando si associa un parametro alla query:

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

In caso contrario, si leggerà come una stringa e in realtà restituire solo gli oggetti che hanno :1 il loro valore emailaddress.

Inoltre, assicurarsi di convalidare l'input dell'utente (self.request.get('emailaddress')) prima di inserirlo nella query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top