MySQL返回列的名称而不是值

时间:2016-04-30 14:40:27

标签: python mysql

我正在读取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))

那么,如何检索值而不是列的名称?

1 个答案:

答案 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或自定义异常可能更合适。)