Строковая переменная Python sqlite3 в исполнении
Я пытаюсь выполнить этот запрос sqlite3 в Python. Я уменьшил код до минимума, работает sqlite.connect и т.д.
column = 'Pron_1_Pers_Sg'
goal = 'gender'
constrain = 'Mann'
with con:
cur = con.cursor()
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain))
con.commit()
rows = cur.fetchall()
for element in rows:
values.append(element)
Возвращает пустой список.
Если я жестко программирую строки, он работает и возвращает значения.
Ответы
Ответ 1
Маркеры параметров могут использоваться только для выражений, т.е. значений.
Вы не можете использовать их для идентификаторов, таких как имена таблиц и столбцов.
Используйте это:
cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,))
или это:
cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,))
(И не выполняйте, прежде чем вы действительно закончите доступ к данным.)
Ответ 2
Попробуйте следующее: c.execute("SELECT {idf} FROM Data WHERE {goal}".\
format(idf=column, goal=constrain))
Ответ 3
Сегодня у меня была такая же проблема. Я не уверен, если это может решить вашу проблему:
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain,))
Важным является последний ,
Попробуй, это была проблема с моим кодом, поэтому, возможно, это тоже поможет. Извините, потому что я не могу объяснить, почему, поскольку я просто изучаю себя и занимаюсь python/sqlite в течение нескольких недель.