0

因此,我试图将列名放入 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

4

1 回答 1

1

SQLite 用提供的值替换参数。在您的情况下,这将与以下内容相同:

SELECT x, y, 'valid_field_name' FROM literal_table
WHERE 'valid_field_name' > 0 AND (some other conditions)
GROUP BY x, y

换句话说,字符串就是字符串;不能将参数作为列名。

于 2013-07-05T15:41:27.677 回答