python - 插入 (...) - 我可以在 Python3 中使用 "format"而不是 "%s"吗?

标签 python mysql python-3.x

为了将数据插入 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/

相关文章:

python - Python中的代码组织: Where is a good place to put obscure methods?

python - 如何使用Keras的多层感知器进行多类分类

python - Scrapy在启动时不加载HttpProxyMiddleware

php - MySQL PHP 插入和更新

mysql - 从现有 Sphinx 索引作为数据源派生新的 Sphinx 索引?

python - 在 python 3.4.3 上安装 pyinstaller

python - 为什么 CPython 有一个 "POP_BLOCK"操作码?

mysql - 删除不必要的字符串并更新 MySql 中的日期格式

python - 如何使 python 从命令行处理输入?

python - 网状:无法配置 python3