Sto solo convertendo il mio commento precedente in una risposta, poiché sembrava essere la soluzione giusta :-)
Il problema viene da una linea diversa. Hai questo:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email))
Questo non fa quello che potresti pensare che faccia. Inserimento di email
tra parentesi non fa nulla, quindi la riga è effettivamente equivalente a passare ogni carattere di qualunque cosa sia in quella variabile in un elenco di caratteri. Se invece fai così:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email,))
...allora passerai una tupla contenente un elemento, email
e dovrebbe funzionare meglio.