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

标签 python sql python-3.x sqlite

我正在处理一个简单的登录,并有一个名为 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/

相关文章:

python - 在 for 循环中将值加在一起 ​​(Python)

python - 无法在 Python 的 OpenCV 中加载 OpenCL 运行时

c# - 来自 OracleDB 的长查询

php - 用于数据过滤的 SQL 查询

sql - T-SQL 选择第一个实例

python - 绘制非结构化三角形曲面 Python

python - 将两个日期时间对象转换为每月日期时间范围

python - 多个 celery 远程 worker

python - 使用 scikit RandomForestClassifier 的平均降低精度使用哪个精度分数

python - 使用 stringIO 对象作为 ssl key /证书文件