Jen převádím svůj dřívější komentář na odpověď, protože se to zdálo jako správné řešení :-)
Problém pochází z jiné linie. Máte toto:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email))
Tohle nedělá to, co si možná myslíte, že ano. Vkládání email
v závorkách nedělá nic, takže řádek je ve skutečnosti ekvivalentní předání každého znaku čehokoli, co je v této proměnné v seznamu znaků. Pokud místo toho uděláte toto:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email,))
...potom předáte n-tici obsahující jednu položku, email
a mělo by to fungovat lépe.