2016-01-22 83 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)