Python MySQL 预处理语句够用吗?还需使用 escape_string() 吗?

4 投票
3 回答
2170 浏览
提问于 2025-04-17 12:11

那么这个:

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'\\"'),)

你会发现,第二种写法在 " 前面多了一个不必要的 \。所以第一个方法是可以的。

撰写回答