我正在 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)
答案 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 为空,您将收到错误消息(如果您不测试)