【问题标题】:fetchall() returning [] after insertingfetchall() 插入后返回 []
【发布时间】:2022-01-24 18:01:31
【问题描述】:

我正在使用 python 3.9。

程序接受 3 个输入(usernamepasswordemail),然后使用 sha256 对密码变量进行哈希处理并将其返回为 result.usernamepasswordemail 被插入放入名为accounts 的表中。它提交更改并使用cur.fetchall() 打印出表格。

import hashlib
import sqlite3
con = sqlite3.connect('users/accounts.db')

print("Sign Up.")
username = input("Input your username : ")
password = input("Input your password : ")
email = input("Input your email: ")

result = hashlib.sha256(password.encode("utf-8"))

cur = con.cursor()
cur.execute("insert into accounts (username, password, email) values(?,?,?)",(username, str(result.digest()), email))
con.commit()

print(cur.fetchall())
con.close()

【问题讨论】:

  • 没有什么可取的。您只能在 SELECT 查询之后获取。
  • 没有回答你的问题,但我希望这不是用于生产代码。散列密码(即使使用 SHA256)是一种糟糕的密码存储方式。至少,您需要在密码中添加“salt”。最佳情况下,您应该使用 pbkdf2。
  • 我知道,显然这不适用于生产,而且我知道 salts 和 pbkdf2,但我还没有实现它们。这是一个测试代码。 @Fra
  • @Gurserit。好的。只是双重检查。这不是用于生产代码的,这并不完全明显,因为这几乎是 Adob​​e 在其密码被黑时使用的,也是为什么泄露如此严重的原因。

标签: python sqlite


【解决方案1】:

您需要先执行 SELECT 查询,然后才能获取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2018-01-04
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多