Python mysql是否已经准备好了语句,还是需要escape_string()?

时间:2012-02-02 14:20:41

标签: python mysql

这就是:

cursor.execute("Insert INTO visit (pid, date, diagnosisid) VALUES (%s,%s,%s)",
(pid, date, diagnosisid))

足够或我需要:

cursor.execute("Insert INTO visit (pid, date, diagnosisid) VALUES (%s,%s,%s)",
(escape_string(pid), escape_string(date), escape_string(diagnosisid)))

3 个答案:

答案 0 :(得分:3)

第一个代码示例已经可以安全地防止SQL注入。第二个示例将在您的数据库中引入其他引号,这很可能您想要的内容。

答案 1 :(得分:3)

第一个就足够了;第二个会加倍努力,取而代之的是" \" >>> c.execute("SELECT %s, %s", ('"', MySQLdb.escape_string('"'))) 1L >>> c.fetchall() ((u'"', u'\\"'),) 。您可以使用

自行测试
\

所以你看到第二个版本会在"之前产生一个不需要的{{1}}。所以第一个是好的。

答案 2 :(得分:0)

只要它不是格式化的字符串并且它们确实是准备好的语句,您就不必担心。

它可能会导致更多的问题,而不是两次逃避它的价值。