Python MySQL - MySQLdb - 字符串中的撇号导致录入失败
你好,我正在把字符串插入到MySQL数据库里,一切都很顺利,直到有一个字符串里面包含了一个撇号('),这时候就出问题了,数据就无法进入数据库。这个字符串是标题,可能会包含一些特殊字符,比如撇号、引号等等。我试过使用MySQLdb.escape_string(title)来处理这个问题,但还是没能解决,可能是我用错了。
insert = "insert into %s (location, mode, process, status, title) values ('%s', '%s', '%s', '%s', '%s')" % (self.params["tableName"], location, transporterMode, "-", "Queued", MySQLdb.escape_string(self.title))
cur.execute(insert)
self.params["db"].commit()
1 个回答
4
这就是为什么你不应该使用字符串插值的原因。数据库的API有一种很好的方法来提供字符串参数,这不仅能解决你在使用单引号时遇到的问题,还能保护你免受SQL注入攻击。
insert = "insert into {} (location, mode, process, status, title) values (%s, %s, %s, %s, %s)".format(self.params['tableName'])
cur.execute(insert, (location, transporterMode, "-", "Queued", self.title))
注意,你不需要自己给占位符加引号,而是把参数作为第二个参数传递给cursor.execute。同时,你确实需要使用字符串插值来处理表名:我使用了更新的format
语法,这样它就不会尝试替换其他占位符。