我在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)
我根据我得到的错误尝试了几种方法。
答案 0 :(得分:2)
%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
。