Pergunta

Quero verificar se um email está no meu banco de dados no AppEngine e, se não: digite -o no armazenamento de dados.

Eu sou novo no Python.Por que esse código simples não está funcionando? (Também se houver uma maneira melhor/mais eficiente de escrever isso, diga -me)

(Recebo o erro: BadargumentError: argumentos posicionais não 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()

E para referência, esta é minha classe de banco de dados:

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

Solução

Você não precisa usar aspas ao vincular um parâmetro à consulta:

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

Caso contrário, ele o lerá como uma string e realmente retornará apenas objetos que têm :1 como seu valor por e -mail.

Além disso, certifique -se de validar a entrada do usuário (self.request.get('emailaddress')) antes de inseri -lo na consulta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top