Hanya mengubah komentar saya sebelumnya menjadi jawaban, karena sepertinya itu solusi yang tepat :-)
Masalahnya datang dari jalur yang berbeda. Anda memiliki ini:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email))
Ini tidak melakukan apa yang mungkin Anda pikirkan. Menempatkan email
dalam tanda kurung tidak melakukan apa-apa, jadi baris sebenarnya setara dengan meneruskan setiap karakter dari apa pun yang ada dalam variabel itu dalam daftar karakter. Jika Anda melakukan ini:
x = c.execute("SELECT * FROM users WHERE email = (%s)",
(email,))
...maka Anda akan mengirimkan Tuple yang berisi satu item, email
, dan itu akan bekerja lebih baik.