我正在尝试将列名放入SQL查询中
import sqlite3
db = sqlite3.connect('path/to/my/database.sqlite')
cur = db.cursor()
def get_val(field):
return cur.execute('''
SELECT x, y, :field FROM literal_table
WHERE
:valid_field_name > 0 AND
(some other conditions)
GROUP BY x, y''',
{'field': field}).fetchall()
get_val('valid_field_name')
但是当我执行代码时,python不是从列中获取值而是返回
[(x1, y1, u'valid_field_name'), (x2, y3, u'valid_field_name'), ...]
我知道你不能对表名进行编码,但是列名的文档中有一些例子是参数化的。我已经用字符串格式化(用于私有数据处理的代码,因此SQL注入不是问题)一起破解了一个解决方案,但我需要了解发生了什么!
我正在使用Python 2.7.3
答案 0 :(得分:1)
SQLite用提供的值替换参数。 在您的情况下,这将与:
相同SELECT x, y, 'valid_field_name' FROM literal_table
WHERE 'valid_field_name' > 0 AND (some other conditions)
GROUP BY x, y
换句话说,字符串是字符串;不能将参数作为列名。