You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:50