SQLite3(Python):execute()命令绑定字符串参数失效问题
解决SQLite字符串参数绑定的问题
嘿,我一眼就看出问题出在哪了——你给testname手动套了双引号,这可是参数绑定的大忌啊!
问题到底出在哪?
你写的testname = "\"EJtheDJ\"",相当于把字符串变成了带双引号的"EJtheDJ",但SQLite的参数绑定机制会自动为字符串参数添加必要的引号和转义处理。这就导致实际传到SQL查询里的内容是"EJtheDJ"(连引号一起),而不是你真正想匹配的EJtheDJ,自然查不到结果,代码就跑不通了。
正确的处理方式
1. 去掉手动添加的引号
直接用用户输入的原始字符串就行,不需要加任何引号:
testname = "EJtheDJ" # 这才是用户输入的真实值,不用手动加引号 c.execute("SELECT lastfm FROM usernames WHERE username = ?", [testname])
2. 对比两种写法的差异
给你拆解下两种写法对应的实际SQL语句:
- 错误写法(手动加引号):SQL会执行
SELECT lastfm FROM usernames WHERE username = '"EJtheDJ"',相当于找用户名是"EJtheDJ"(带引号)的记录,显然不是你要的。 - 正确写法:SQLite自动处理后会变成
SELECT lastfm FROM usernames WHERE username = 'EJtheDJ',这才是符合预期的查询逻辑。
额外小贴士
- 不管用户输入的字符串有没有特殊字符(比如单引号、斜杠),参数绑定都会自动帮你转义,完全不用手动处理——这也是参数绑定能防止SQL注入的核心原因。
- 整数参数没问题是因为整数类型不需要引号,所以你没踩坑,但字符串一定要记住别画蛇添足加引号哦!
内容的提问来源于stack exchange,提问作者Elias Jackson
相关产品推荐
相关产品推荐

