Jag konverterade bara min tidigare kommentar till ett svar, eftersom det verkade vara rätt lösning :-)
Problemet kommer från en annan linje. Du har detta:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email))
Det här gör inte vad du kanske tror att det gör. Lägger in email
inom parentes gör ingenting, så raden motsvarar faktiskt att skicka in varje tecken av vad som finns i den variabeln i en lista med tecken. Om du istället gör så här:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email,))
...då skickar du in en tupel som innehåller ett objekt, email
, och det borde fungera bättre.