Python使用sqlite3查询字段以指定字符开头报语法错误如何解决?
错误原因
- 占位符
?不需要用单引号包裹:你在SQL中写的'?%'会被sqlite3识别为普通字符串,不会当作参数占位符处理,直接触发语法解析错误。 - 通配符
%不能直接拼接在SQL语句的占位符后,需要和参数值合并后再传入。 execute方法的第二个参数必须是元组类型,哪怕只有一个参数,也要加后缀逗号,否则传入单个字符串会被拆分为多个单字符参数,触发参数不匹配错误。- 额外注意:你的需求是查询姓氏以指定字母开头的演员,应该匹配
Surname字段而非Name字段;同时确认表名是否正确,你代码中写的表名是acteurs,如果实际表名为Actors需要同步修改。
正确修改后的代码
如果按需求匹配姓氏字段,代码修改如下:
# 通配符和参数提前拼接,参数以元组形式传入 cur.execute(""" SELECT name, surname FROM acteurs WHERE surname LIKE ? """, (firstletter + '%',)) actors = cur.fetchall()
如果要保留原逻辑按Name字段匹配、表名确认为acteurs,修改为如下即可:
cur.execute(""" SELECT name, surname FROM acteurs WHERE name LIKE ? """, (firstletter + '%',)) actors = cur.fetchall()
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

