Получение данных типа «нет» вместо объекта из MySQL в PyCharm

#python #mysql #pycharm

Вопрос:

Я работаю с активностью входа в систему в PyCharm(Python), вызывая некоторые данные из базы данных MySQL, такие как электронная почта и пароль, я получаю ошибку типа «нет», как показано ниже.

Ошибка типа: объект ‘NoneType’ не может быть подписан, если информация[’email’]==имя пользователя и информация[‘пароль’]==пароль:

Согласно моему расследованию, некоторая проблема заключается в следующем коде.

 cursor.execute("SELECT * FROM `logininfo` WHERE email=%s AND password=%s", (username, password))
            info = cursor.fetchone()
            print(info)
            if info['email']==username and info['password']==password:
 

Весь мой код PyCharm выглядит следующим образом

 from flask import Flask, render_template, request, redirect,session, url_for
from flask_mysqldb import MySQL
import MySQLdb

app = Flask(__name__)
app.secret_key = "1234353234"

app.config["MYSQL_HOST"] = "127.0.0.1"
app.config["MYSQL_USER"] = "root"
app.config["MYSQL_PASSWORD"] = "password"
app.config["MYSQL_DB"] = "login"

db = MySQL(app)


@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        if 'username' in request.form and 'password' in request.form:
            username = request.form['username']
            password = request.form['password']
            cursor = db.connection.cursor(MySQLdb.cursors.DictCursor)
            cursor.execute("SELECT * FROM `logininfo` WHERE email=%s AND password=%s", (username, password))
            info = cursor.fetchone()
            print(info)
            if info['email']==username and info['password']==password:
                return "Logged in Successfully"
            else:
                return "Please register first!"
    return render_template("login.html")


if __name__ == '__main__':
    app.run(debug=True)

 

Комментарии:

1. Это не имеет никакого отношения к pycharm. Это всего лишь редактор кода

2. Согласно документам , ваш запрос не вернул совпадение — «Этот метод извлекает следующую строку результирующего набора запроса и возвращает одну последовательность или нет, если больше строк недоступно».

Ответ №1:

Когда этот запрос

 cursor.execute("SELECT * FROM `logininfo` WHERE email=%s AND password=%s", (username, password))
info = cursor.fetchone()
 

не находит подходящую строку, она возвращает None (null в Python). это приводит к сбою info[«электронная почта»], потому что нет объекта для проверки.

Поэтому вам придется изменить свой код на:

         if info and info['email']==username and info['password']==password:
            return "Logged in Successfully"
        else:
            return "Please register first!"
 

Комментарии:

1. @Ганешкадам, пожалуйста, не забудьте принять ответ, если он сработал. Спасибо!

2. Слева от ответа под счетчиком голосов установлен флажок. Нажмите на него, и он загорится зеленым, указывая, что этот ответ был принят. Для более подробного объяснения ознакомьтесь с мета-сайтом, meta.stackexchange.com/questions/5234/…