获取错误 - TypeError: 'NoneType' 对象不可下标

时间:2021-05-25 10:14:25

标签: python mysql pycharm

我正在 pycharm 中使用数据库 MySQL 和库烧瓶处理登录活动。 在检查电子邮件和密码时,我收到一条错误消息:“TypeError: 'NoneType' 对象不可调用。”

错误如下:

File "C:\Users\Ganesh kadam\PycharmProjects\myproject\main.py", line 26, in index 
 if info['email']==username and info['password']==password: 
TypeError: 'NoneType' object is not subscriptable
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"] = "local"
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 个答案:

答案 0 :(得分:1)

您的查询有问题。您应该为列名使用反引号或根本不使用反引号,而不是单引号。使用单引号,您正在测试字符串 email 是否等于某物。 此查询:

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

应该是这样的

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

除此之外,您应该测试 info 是否为空(查看是否有任何电子邮件和密码与您的查询匹配。如果 info 为空,您将收到错误消息(如果您不测试)