您正在将字符串插入到MySQL数据库中,该数据库工作正常,直到我的一个字符串包含一个撇号,它会断开,并且不会在数据库中输入任何内容。它是标题字符串,可能包含奇数字符,撇号,语音标记等。我已经尝试了MySQLdb.escape_string(标题),但仍然无法使它工作,也许我错误地使用它。
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()
答案 0 :(得分:4)
这正是您不应该使用字符串插值的原因。 DB 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))
请注意,您自己不引用占位符,并将params集作为cursor.execute的第二个参数传递。另请注意, do 需要对表名使用字符串插值:我使用了较新的format
语法,因此它不会尝试替换其他占位符。