首页 > 解决方案 > 无法从 MYSQL DB 中检索用户名...我做错了什么?

问题描述

新手编码员在这里:)

我有一个带有“用户”表的 MYSQL 数据库设置。在我的 Flask 应用程序中,我可以让用户创建登录凭据。当用户正确登录时 - 我希望他们的名字 {{ session.name }},而不是用户名,显示在重定向页面上。不知何故,我无法让它工作。我可以显示他们的用户名 {{ session.username }},但这不是我想要的。

不知何故,它没有从数据库中获取名称。

我不确定我是否通过会话进行了正确的数据库调用。

我的数据库如下所示:

MariaDB [chrimata]> DESCRIBE users;
+---------------+--------------+------+-----+---------------------+----------------+
| Field         | Type         | Null | Key | Default             | Extra          |
+---------------+--------------+------+-----+---------------------+----------------+
| id            | int(11)      | NO   | PRI | NULL                | auto_increment |
| name          | varchar(100) | YES  |     | NULL                |                |
| email         | varchar(50)  | YES  |     | NULL                |                |
| username      | varchar(30)  | YES  |     | NULL                |                |
| password      | varchar(100) | YES  |     | NULL                |                |
| register_date | timestamp    | NO   |     | current_timestamp() |                |
+---------------+--------------+------+-----+---------------------+----------------+

这是我的登录代码:

@app.route('/login', methods=['GET', 'POST'])
def login():
    msg=''
    if request.method == "POST" :
        details = request.form
        Username = details['username']
        Password_candidate = details['password']

        # Check if account exists using MySQL
        cursor = mysql.connection.cursor()
        # Check DB for username...
        result = cursor.execute("SELECT * FROM users WHERE username = %s", [Username])

        if not Username and not Password_candidate :
            error = 'Please fill out the form!'
            return render_template('login.html', msg=error)
        if result > 0:
            #get the stored hash
            account = cursor.fetchone()
            password = account['password']
            Name = account['name']

            if Password_candidate == password:
                session['login_in'] = True
                session['username'] = Username
                session['name'] = Name

我怀疑这是导致问题的 fetchone() 方法或之前的数据库调用。提前致谢

标签: pythonmysqlflask

解决方案


您应该收到一条错误消息。

如果你只给了一个参数,即使后面什么都没有,你仍然需要加一个逗号。

只获得所需的数据就足够了,仅此而已

result = cursor.execute("SELECT name,password FROM users WHERE username = %s", (Username,))

最后请不要以纯文本形式保存密码


推荐阅读