Pregunta

Quiero comprobar si un correo electrónico es en mi base de datos de App Engine, y si no: a continuación, lo inserta en el almacén de datos.

Soy nuevo en Python. ¿Por qué este simple código no funciona? (También si hay una manera mejor manera / más eficiente para escribir esto, por favor dígame)

(I obtener el error: BadArgumentError: argumentos posicionales no utilizados [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()

Y como referencia, esto es mi clase db:

class EmailDatabase(db.Model):
     emailaddress = db.StringProperty()
     date = db.DateTimeProperty(auto_now_add=True)
¿Fue útil?

Solución

No es necesario que use comillas al enlazar un parámetro para la consulta:

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

De lo contrario, lo leerá como una cadena y en realidad sólo devolver los objetos que tienen :1 como su valor EMAILADDRESS.

Además, asegúrese de validar la entrada del usuario (self.request.get('emailaddress')) antes de insertarlo en la consulta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top