我正在 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/