Python3尝试使用动态列名执行sql查询

时间:2016-01-22 09:58:02

标签: python-3.x sqlite

我正在使用sqlite3,我正在尝试使用SELECT查询从数据库中动态返回特定列,问题是我不断获取列名而不是实际行。这是一个示例代码

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')]

这非常烦人,我只想从我的结果中找回特定的列,但我得到的是列名。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

您不能将SQL参数用于表名或列名,仅用于文字值。

您的查询相当于:

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

只需将列名直接放入查询中:

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

答案 1 :(得分:0)

SELECT查询中使用 name,network-id 列,如下所示:

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

?用于重新查询查询中的值,例如

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