2016-01-22 85 views
0

我正在使用sqlite3,我想动态地返回来自数据库的特定列使用SELECT查询,问题是我不断收到列名而不是实际的行。下面是一个例子代码Python3试图执行SQL查询动态列名

import sqlite3 
conn = sqlite3.connect('db_name.db') 
c = conn.cursor() 

query = 'SELECT ?, ? FROM devices' 
columns = ('name','network-id') 
c.execute(query, columns) 

print(c.fetchall()) 

这是结果我得到:

[('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id'), ('name', 'network_id')] 

这是很烦人的,我只是想从我的结果回来特定列,但我得到的列名代替。任何帮助将不胜感激

+0

第6行代码它实际上是'network_id' – prototypus

回答

0

您不能使用表名或列名的SQL参数,只能用于字面值。

您所查询的是等价的:

SELECT 'name', 'network-id' from devices 

只需将列名直接进入查询:在SELECT查询本身作为

columns = ('name','network-id') 
query = 'SELECT %s from devices' % ','.join(columns) 
+0

非常感谢。我不知道SQL参数只能用于字面值。 – prototypus

0

使用列名,网络ID如下:

query = 'SELECT name, network-id FROM devices' 

?用于在查询中重新分隔空间值

query = 'SELECT name, network-id FROM devices where name = ?' 
columns = ('my-name') 
c.execute(query, columns)