为什么数据库的响应周围有括号?

Why are there brackets around the response from database?

我试图了解我们可以从数据库中获取的不同值 '''

        tmppass = db.execute("SELECT * from users WHERE username=:username", {"username": session['user_id']}).fetchone()
        tmppass_1 = db.execute("SELECT password from users WHERE username=:username", {"username": session['user_id']}).fetchone()
        old_password = request.form.get('old_password')
        newpass_1 = request.form.get('new_password_1')
        newpass_2 = request.form.get('new_password_2')
        hashOfNewPass = str(pbkdf2_sha256.hash(newpass_1))
        oldPassHash = pbkdf2_sha256.hash(old_password)
        print(tmppass['password'])
        print(tmppass_1)

'''

我从 tmppass 和 tmppass_1

的数据库中得到不同的结果
tmppass_1 = ('$pbkdf2-sha256000$bs1Z6z0HYOw9R4hR6t37nw$.ZtoRLUsZCYmkbRVNTiZt1uLLQwuJ.iyxrNcHg43SYA',)

tmppass['password'] = $pbkdf2-sha256000$bs1Z6z0HYOw9R4hR6t37nw$.ZtoRLUsZCYmkbRVNTiZt1uLLQwuJ.iyxrNcHg43SYA

[tmppass_1 仅从数据库中获取散列值正在打印带有方括号的字符串][1]

一般来说,Python中的(x,)是一个只有一个元素的元组。

由于您使用的是 SELECT *,因此会返回一个元组(即使 table 中只有一列)。这是一种设计选择,目的是在所有 SELECT * 查询之间实现一致性,而不管实际的列数如何(具体而言,如果稍后将列添加到 table 使用的列,则确保现有代码不会中断在 SELECT * 查询中)。