如何将Python参数化MySQL语句与动态SELECT语句结合起来?

时间:2014-03-12 00:24:13

标签: python mysql

我有一个后端数据库,我将使用动态SELECT语句作为列名。问题是当我使用方法A时,列名称被正确打印但Mac_Address字段没有周围的' &#39 ;.在方法B中,相反的情况是真实的,其中Mac_Address有它的引用' '但是' '也出现在我的专栏名称周围。我怎样才能让两者同时工作?

方法A)

mac_address = 'xx xx xx xx xx xx'
et_labels = ['RSSI','ADC0','ADC1]
sql = "SELECT %s FROM mac_tbl WHERE Mac_Address = %s" % ((','.join(map(str,et_labels))),mac_address)
cursor.execute(sql)

这运行:

SELECT RSSI, ADC0, ADC1 WHERE Mac_Address = xx xx xx xx xx xx

这失败了,因为MySQL希望看到Mac_Address,如下所示:'xx xx xx xx xx xx'

方法B)

mac_address = 'xx xx xx xx xx xx'
et_labels = ['RSSI','ADC0','ADC1]
cursor.execute("""SELECT %s from mac_tbl WHERE Mac_Address = %s;""",(",".join(et_labels),mac_address))

这运行:

SELECT 'RSSI,ADC0,ADC1' WHERE Mac_Address = 'xx xx xx xx xx xx'

此操作失败,因为列名称周围有' ',并且未被视为单独的名称,但Mac_Address字段是正确的。

我尝试这样做的原因是列名是从远程设备动态读取的,它们都有不同的配置,因此我需要在生成SELECT语句之前为每个设备列出特定的配置。

1 个答案:

答案 0 :(得分:1)

试试这个:

mac_address = 'xx xx xx xx xx xx'
et_labels = ['RSSI','ADC0','ADC1]
query = """
   SELECT {0} FROM mac_tbl 
      WHERE Mac_Address = %s;
""".format(",".join(et_labels))
cursor.execute(query,(mac_address,))

在此代码中,我们在执行查询(并传递参数)

之前使用字符串格式

HTH。