Python MySQL 预处理语句够用吗?还需使用 escape_string() 吗?
那么这个:
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注入的安全措施。第二个示例会在你的数据库中多出一些引号,这很可能不是你想要的结果。
3
第一个方法就够用了;第二个方法会让你多做很多工作,比如把 "
替换成 \"
。你可以自己试试,看看效果。
>>> c.execute("SELECT %s, %s", ('"', MySQLdb.escape_string('"')))
1L
>>> c.fetchall()
((u'"', u'\\"'),)
你会发现,第二种写法在 "
前面多了一个不必要的 \
。所以第一个方法是可以的。