Python sqlite3 string variable in execute

python, sqlite

Solution

Parameter markers can be used only for expressions, i.e., values. You cannot use them for identifiers like table and column names.

Use this:

cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,))

or this:

cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,))

(And don't commit before you have actually finished accessing the data.)

Problem

I try to execute this sqlite3 query in Python. I reduced the code to the minimum, sqlite.connect, etc works. ``` 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) ``` This returns an empty list. If I hardcode the strings, it works and returns values.

Original source