Я использую Python 3.6 и sqlite3 для своего проекта и по какой-то неизвестной мне причине при использовании "?" для подстановки имени столбца я не получаю значение в запросе SELECT, но вместо этого получаю имя столбца в качестве возвращаемого значения.
Я приведу несколько запросов (база данных очень проста) и как я использую подстановку в коде:
#this woks without any issues
c.execute('SELECT item_id FROM Items WHERE Name=?', (data,))
#I have an issue with this
c.execute('SELECT ? FROM Items WHERE Name=?', (column_name, data))
Во втором запросе ожидаемое возвращение - это значение из столбца, но вместо этого я получаю кортеж, который содержит имя столбца вместо значения.
c.fetchone()
#expected return is (2,)
#return which I get is ('Sensor_value',) where 'Sensor_value' is column name
c.fetchall()
#return is [('Sensor_value',)] if someone needed that info
Мне известно, что я могу использовать для этого манипуляции со строками, но я хотел бы знать, почему это не работает, хотя это наиболее интуитивный способ справиться с этим.
Временно я использую следующий код, чтобы обойти эту проблему, поэтому я не смотрю на подобные решения:
c.execute('SELECT {col} FROM Items WHERE Name={na}'\
.format(col=column_name, na=data))