适用于3.x之前的Python的SQL查询

时间:2017-05-05 13:21:39

标签: 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)

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

1 个答案:

答案 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