gpt4 book ai didi

python - SQL 查询返回 "None"而不是行

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:07 25 4
gpt4 key购买 nike

我正在处理一个简单的登录,并有一个名为 Users 的表格。我正在尝试使用我的登录表单 POST 正文并在数据库中验证它。

来自表单的值:

user = request.form['username']
password = request.form['password']

SQL语句:

conn = sqlite3.connect(db)
cur = conn.cursor()
cur.execute("SELECT * FROM Users WHERE Username LIKE '(%s)'" % user)
row = cur.fetchone()

用户表:

enter image description here

所以在 POST从我的表格请求,这是打印的内容:

Print(user, password) =  ph104694 Password123
Print(row) = None

因此您可以看到该行返回为 None当数据绝对存在时。如果我改变 user对于我知道不正确的事情,我得到了相同的结果,但是如果我将表格从 Users 更改为类似于 Users2我遇到了 no table exists错误很好。因此,尽管存在匹配数据,但我的声明中的某些内容不允许它生成该行。有什么想法吗?

最佳答案

  1. 您正在搜索的表达式正在评估 (ph104694),这显然存在于您显示的数据中。

  2. 没有理由在这里使用 LIKE 运算符,它可能与您想要做的事情背道而驰(匹配与输入的用户 ID 完全匹配的单个记录)。

  3. 这是遭受 SQL 注入(inject)攻击的典型代码示例。您永远、永远、永远都不应该使用字符串插值来构建这样的 SQL 字符串。相反,使用参数替换。

综合起来,您想要这样的东西:

 cur.execute("SELECT * FROM Users WHERE Username = ?", [user])

关于python - SQL 查询返回 "None"而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53473365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com