为了将数据插入 MySql,我在 Python 3 中这样做:
import MySQLdb
# .....
cursor.execute("""INSERT INTO table1(col1, col2, col3) VALUES(%s, %s, %s)""" ,(data["col1"], data["col2"], data["col3"])
因为它是 Python 3,我可以用 format
替换 %s
吗?如何替换?
最佳答案
不,在这种情况下你不能。与数据库访问结合使用的 %s
用法仅与 %s
的“正常”用法相关。具体来说,%s
只是数据库获取其参数的一种可能方式。还有其他几种方法,?
其中,它们是特定于数据库的。
然而,最大的区别在于数据库会根据自己的选择进行适当的数据处理,例如准备好的语句或数据转义。在这两种情况下,传递到数据库的数据都是安全的,不会受到任何注入(inject)。
OTOH,如果您进行自己的格式化,无论是使用 %
还是使用 .format()
,您都无法避免 SQL 注入(inject)。
换句话说,不,使用.format()
进行数据库查询组装是不可取的,很容易导致安全漏洞。
所以 .format()
是 "%s"% whatever
的一个很好的替代品,但不是 corsor.execute("... %s ...”,随便)
,因为那是完全不同的事情。
关于python - 插入 (...) - 我可以在 Python3 中使用 "format"而不是 "%s"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35201087/