#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/…