Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MySQL数据库查询返回的是整数而不是行数据_Python_Mysql_Python 3.x_Flask_Mysql Python - Fatal编程技术网

Python MySQL数据库查询返回的是整数而不是行数据

Python MySQL数据库查询返回的是整数而不是行数据,python,mysql,python-3.x,flask,mysql-python,Python,Mysql,Python 3.x,Flask,Mysql Python,我正在尝试测试数据库中是否已经存在以表单(电子邮件地址和密码)形式提交的信息。如果电子邮件存在,我想检查数据库中相应的哈希密码是否与提交密码的哈希版本匹配 以下是我的登录路径的完整摘录: # Login route @app.route("/login", methods=["GET", "POST"]) def login(): """Log user in"""

我正在尝试测试数据库中是否已经存在以表单(电子邮件地址和密码)形式提交的信息。如果电子邮件存在,我想检查数据库中相应的哈希密码是否与提交密码的哈希版本匹配

以下是我的登录路径的完整摘录:

# Login route
@app.route("/login", methods=["GET", "POST"])
def login():
    """Log user in"""

    # Forget any user_id
    session.clear()

    # User reached route via POST (as by submitting a form via POST)
    if request.method == "POST":

        # Create a cursor
        cur = mysql.connection.cursor()

        # Ensure email was submitted
        if not request.form.get("email"):
            return apology("must provide email", 403)

        # Ensure password was submitted
        elif not request.form.get("password"):
            return apology("must provide password", 403)

        # Store email in a variable
        email = request.form.get("email")

        # Query if email is within database
        query = cur.execute("SELECT * FROM users WHERE email = %s", (email,))

        # Ensure email exists and that the password is correct
        if len(query) != 1 or not check_password_hash(query[0]["hashedpassword"], request.form.get("password")):
            return apology("invalid email and/or password", 403)

        # Remember which user has logged in
        session["user_id"] = query[0]["id"]

        # Redirect user to the homepage
        return redirect("/")

    # User reached route via GET (as by clicking a link or via redirect)
    else:
        return render_template("login.html")
我遇到的困难是:

        # Ensure email exists and that the password is correct
        if len(query) != 1 or not check_password_hash(query[0]["hashedpassword"], request.form.get("password")):
            return apology("invalid email and/or password", 403)
在这里,我试图从数据库中提取指定电子邮件地址的一行信息。我试图使用len来查看是否存在一行(两行不能存在,因为我已经确保了email address列在数据库中是唯一的),因此应该只有一行或没有一行

问题是我以前的数据库查询返回的是一个整数值(query=1),如下错误所示:

[2020-10-05 11:34:27,857] ERROR in app: Exception on /login [POST]
Traceback (most recent call last):
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\users\tjmce\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\tjmce\Desktop\Final Project\app.py", line 81, in login
    if len(query) != 1 or not check_password_hash(query[0]["hashedpassword"], request.form.get("password")):
TypeError: object of type 'int' has no len()
有人能帮我理解为什么查询的值是1而不是行数据吗


谢谢大家!

您缺少的部分是

rows = cursor.fetchall()

它会将数据返回给您,您将能够在
行上实现逻辑

rows = cursor.fetchall()
它会将数据返回给您,您将能够在
行上实现逻辑