我正在读取MySQL数据库,使用以下命令查找数据库中特定列的值:
select = ["c9", "TEMP"]
c.execute("SELECT Client, %s, Date_Time FROM data WHERE Client = %s and Date_Time > '2016-04-26 18:17:15'", (select[1],select[0]))
但我获得了下面的值,这对于第一列和第三列是正确的,但是,我得到第二列的名称而不是值:
('c9', 'TEMP', datetime.datetime(2016, 4, 26, 20, 6, 53))
('c9', 'TEMP', datetime.datetime(2016, 4, 26, 20, 7, 53))
('c9', 'TEMP', datetime.datetime(2016, 4, 26, 20, 8, 53))
而不是例如
('c9', '2700', datetime.datetime(2016, 4, 26, 20, 6, 53))
('c9', '2720', datetime.datetime(2016, 4, 26, 20, 7, 53))
('c9', '2700', datetime.datetime(2016, 4, 26, 20, 8, 53))
那么,如何检索值而不是列的名称?
答案 0 :(得分:3)
无法在查询中参数化列名。您必须以其他方式插入列名称:
select = ["c9", "TEMP"]
query = "SELECT Client, {}, Date_Time FROM data WHERE Client = %s and Date_Time > '2016-04-26 18:17:15'".format(select[1])
cursor.execute(query, (select[0],))
请注意,这会使您在插入列名时容易受到SQL注入的影响。你需要检查它以确保它是安全的。我会谨慎行事,并采取以下措施:
assert select[1].isalnum()
(AssertionError
可能不是正确的错误,因为它应该用于检查内部不变量。引发ValueError
或自定义异常可能更合适。)