Я использую пакет mysql-connector-python для проекта во Flask.Для части маршрутизации при регистрации я хочу, чтобы MySQL проверил, существует ли уже имя пользователя, и если это произойдет, я установлю ошибку.Мой код выглядит следующим образом:
@bp.route('/signup', methods=('POST',))
def signup():
...
username = reqObj["username"]
password = reqObj["password"]
error = None
db = get_db()
cursor = db.cursor()
query = ("SELECT * FROM userinfo "
"WHERE username=%s")
existingUser = cursor.execute(query, (username,)).fetchone()
if existingUser is not None:
error = "Username already exists"
if error is None:
cursor.execute(
'INSERT INTO userinfo (username, password) VALUES (%s, %s)',
(username, generate_password_hash(password))
)
cursor.close()
db.commit()
res = {'actionSuccess': True}
return jsonify(res)
else:
res = {'actionSuccess': False, 'error': error}
return jsonify(res)
Функция get_db () возвращает объект mysql.connector.connect ().Однако, когда я запускаю это на сервере и тестирую, я получаю в Flask сообщение об ошибке:
...
existingUser = cursor.execute(query, (username,)).fetchone()
AttributeError: 'NoneType' object has no attribute 'fetchone'
Так что я полагаю, что моя ошибка где-то с моим cursor.execute (), который я предполагаювозвращает NoneType.Поэтому я удаляю функцию fetchone () и пытаюсь снова, но теперь я получаю эту ошибку вместо:
...
File "e:\flasktest2\lib\site-packages\mysql\connector\connection.py", line 1128, in handle_unread_result
raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found
Это сбивает с толку еще больше, потому что сейчас говорится, что есть непрочитанные результаты, когда минуту назадcursor.execute () был NoneType.Я не знаю, что является причиной ошибки.Затем я попытался закомментировать весь раздел запроса SELECT и просто проверил, будет ли работать INSERT, и, конечно же, это сработало.Что является причиной моих ошибок?