python - 3.x 之前的 Python 的正确 SQL 查询

标签 python mysql python-2.7 mysql-python

我正在 Linux 和 Python 2.7 上运行 [Water] Meter Data Management 系统。我一直在阅读像 this 这样的帖子.

构造查询的正确、安全的语法是什么,而不必使用涉及 %s 的不太安全的方法?

rc = test_cur.execute("select m.* from meter m where m.acct_no = '%s' ", acct_no)

我根据遇到的错误尝试了几种方法。

最佳答案

此处的 %s 不代表 Python 字符串格式化占位符。在本例中,这是一个 MySQL 驱动程序 query parameterization placeholder .占位符由数据库驱动程序替换,参数在单独的参数中传递给 execute()。这与常规字符串格式不同。

请注意,在这种情况下,您不需要在 %s 周围加上引号 - 驱动程序将根据参数类型自动决定是否需要引号:

rc = test_cur.execute("select m.* from meter m where m.acct_no = %s", (acct_no, ))

另请注意包含在元组中的acct_no

关于python - 3.x 之前的 Python 的正确 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43806090/

相关文章:

php - Codeigniter:关于如何构建重置密码/忘记密码的简单直接教程?

python - 在python中通过json递归

python - pip 失败,出现 AttributeError : 'module' object has no attribute 'wraps'

python - 查找一列中的重复项与另一列中的非重复项

python - 嵌套依赖项的 Pip index-url 问题

jquery - 选择下拉列表时从数据库填充文本区域

python - 查找给定节点的最高权重边

python - 获取不带 "NaN"的列数

python - 如何在 Pandas DataFrame 的多个列中进行一次性编码以供以后与 Scikit-Learn 一起使用

mysql - 创建 table1 的备份/快照,名称中带有时间戳,然后 select * from table1 into table1.YYYYMMDDHHMM.backup