我有一个后端数据库,我将使用动态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语句之前为每个设备列出特定的配置。
答案 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。