Строковая переменная 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 в течение нескольких недель.