Python中SQL转义斜杠失效,如何解决MySQL语法错误?
解决MySQL插入时含斜杠字段的SQL语法错误
你碰到的问题核心是错误地用字符串格式化拼接SQL语句——不管手动加不加escape_string,这种方式都会把字段值直接拼进SQL结构里,导致像斜杠这类特殊字符破坏SQL语法,同时还会带来SQL注入的风险。
正确的做法是使用MySQLdb内置的参数化查询,它会自动帮你处理值的转义、引号包裹等问题,完全不需要手动调用escape_string。
正确代码示例
cursor.execute( "INSERT INTO Actors (imdbPageId, fullName) VALUES (%s, %s)", (self.imdbID, self.name) )
为什么原来的写法会报错?
当你用%格式化字符串时,self.imdbID里的/name/nm0991810会直接被插入SQL语句,最终生成的SQL是:
INSERT INTO Actors (imdbPageId, fullName) VALUES (/name/nm0991810, Mahershala Ali)
这显然不符合SQL语法规则:字符串类型的字段值必须用单引号包裹。而参数化查询会自动帮你完成引号添加和特殊字符转义,生成的正确SQL应该是:
INSERT INTO Actors (imdbPageId, fullName) VALUES ('/name/nm0991810', 'Mahershala Ali')
额外提示
参数化查询是操作关系型数据库的标准最佳实践,除了能解决你现在的语法问题,还能彻底避免SQL注入攻击,不管字段值里有什么特殊字符(比如单引号、双引号、斜杠),都能安全正确地插入到数据库中。
内容的提问来源于stack exchange,提问作者FutureCake
相关产品推荐
相关产品推荐

