Flask查询SQLite报错sqlite3.OperationalError: no such column: a如何解决
报错原因
- 核心问题是你直接使用Python字符串拼接的方式构造SQL语句。当
_name的值为a时,拼接后的最终SQL为SELECT * FROM students WHERE name= a,SQLite语法中,不带引号的a会被识别为列名而非字符串值,你的students表不存在名为a的列,因此触发该报错。 - 这种写法同时存在SQL注入的高危安全漏洞,攻击者可构造特殊的
_name参数执行任意SQL语句,窃取、篡改或删除数据库数据。
修复方案
不要自行拼接SQL语句,使用SQLite官方提供的参数化查询语法编写动态条件的SQL,修改cursor.execute行代码即可:
# ? 是SQLite的参数占位符,参数以元组形式传入execute的第二个参数 cursor.execute('SELECT * FROM students WHERE name = ?', (_name,))
该写法会自动为字符串类型的参数添加引号、转义特殊字符,既解决了当前的列名识别错误问题,也从根源上避免了SQL注入风险。
内容的提问来源于stack exchange,提问作者Heuido Kim
相关产品推荐
相关产品推荐

