在Python中使用SQLite3按关键词查询时遇no such column错误求助
SQLite LIKE查询报错解决:no such column: [关键词]
你遇到的问题根源是直接用f-string拼接SQL语句时,没有把关键词当作字符串值处理。比如你传入key_word="test3",生成的SQL语句是:
SELECT * FROM {table_name} WHERE column1 LIKE test3
这里的test3没有加引号,SQLite会把它识别为列名而非要匹配的字符串,自然会报错“no such column: test3”。
解决方案1:使用参数化查询(强烈推荐)
用SQLite的参数占位符?传递值,既避免语法错误,又能防止SQL注入:
# 模糊匹配(包含关键词) curs.execute(f"""SELECT * FROM {table_name} WHERE column1 LIKE ?""", (f"%{key_word}%",)).fetchall() # 精确匹配 # curs.execute(f"""SELECT * FROM {table_name} WHERE column1 LIKE ?""", (key_word,)).fetchall()
注意:参数要放在元组里,作为execute的第二个参数传递,不要拼进SQL字符串中。
解决方案2:手动添加引号(不推荐)
如果一定要用字符串拼接,必须给关键词加上单引号,让SQL识别为字符串:
curs.execute(f"""SELECT * FROM {table_name} WHERE column1 LIKE '%{key_word}%'""").fetchall()
但这种方式存在SQL注入风险,比如当关键词包含单引号时会触发语法错误,不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者elias
相关产品推荐
相关产品推荐

