Параметр Python sqlite3 misinterpreting

Вопрос:

Я пытаюсь поместить имя столбца в 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

Лучший ответ:

SQLite заменяет параметры заданными значениями. В вашем случае это будет то же самое, что:

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

Другими словами, строки являются строками; в качестве имен столбцов невозможно иметь параметры.

Оцените статью
TechArks.Ru
Добавить комментарий