Существует небольшая проблема с вашим первым запросом.
cursor.execute("SELECT * FROM accounts WHERE username = %s", (username))
Это распаковывает значения, переданные в качестве второго параметра, и помещает их в ваш запрос, обычно это делается с помощью кортеж Похоже, это именно то, что вы намеревались, однако здесь есть небольшая, но очень важная часть. Кортежу с одним значением требуется конечная запятая, т.е. (username,)
, иначе это всего лишь скобки вокруг вашей строки. В связи с этим ваша строка фактически распаковывается, и каждый символ передается в качестве аргумента в ваш запрос!
TL; DR
Для передачи необходимо добавить запятую в конце кортеж, а не строка в качестве аргумента.
cursor.execute("SELECT * FROM accounts WHERE username = %s", (username,))