python - 如何将字符串变量插入到这个长Python SQL字符串中?

标签 python mysql string

我有一个存储在 python 字符串中的 MySQL 查询。看起来像这样;

query = """ SELECT colA, colB
            FROM table WHERE colC = '1' """

假设我想插入字符串变量来构造相同的查询

我可以做类似的事情吗?

Var1 = 'colA'
Var2 = 'colB'
query = """ SELECT %s, %s
                FROM table WHERE colC = '1' """, Var1, Var2 

我怎样才能在Python中做到这一点?我正在使用Python 2.7

最佳答案

不能使用列名作为 SQL 参数;您必须手动插入名称;你可以使用 str.format() string formatting为此:

query = """ SELECT `{}`, colB
            FROM table WHERE colC = '1' """.format(Var1)

{} 占位符周围的 ` 反引号用于确保您的列标识符被解释为这样,即使它包含空格或作为关键字的名称。

多列采用多个占位符:

query = """ SELECT `{}`, `{}`
            FROM table WHERE colC = '1' """.format(Var1, Var2)

执行此操作时要极其小心,并始终预先验证 Var1 是有效的列名称。不要盲目接受用户输入,否则您将无法免受 SQL 注入(inject)攻击。

关于python - 如何将字符串变量插入到这个长Python SQL字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25284339/

相关文章:

javascript - 用javascript转义Mysql特殊字符串

c - 如果没有为 printf 提供格式说明符,会发生什么情况?

python - 球谐展开式的数值计算

php - 日期时间字段不允许仅通过 MySQL 和 PHP 使用日期进行搜索

mysql - 在一行中存储对多个表的引用的最佳方式?

php - 使用准备好的语句插入 select MySQL

python - Pandas 拉错列

python - 使用下载缓存将 PIP 包安装到 Virtualenv

python - 我如何检查 Logo 是否在 BMP 文件中?

java - String replaceAll() 与 Matcher replaceAll()(性能差异)