web-dev-qa-db-fra.com

Python sqlite3 variable de chaîne en exécution

J'essaie d'exécuter cette requête sqlite3 en Python. J'ai réduit le code au minimum, sqlite.connect, etc.

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)

Ceci retourne une liste vide. Si je code les chaînes, cela fonctionnera et retournera des valeurs.

14
Steffen

Les marqueurs de paramètre ne peuvent être utilisés que pour les expressions, c'est-à-dire les valeurs. Vous ne pouvez pas les utiliser pour des identificateurs tels que les noms de table et de colonne.

Utilisez ceci:

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

ou ca:

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

(Et ne commettez pas avant d'avoir fini d'accéder aux données.)

31
CL.

Essayez ceci: c.execute("SELECT {idf} FROM Data WHERE {goal}".\ format(idf=column, goal=constrain))

0
Rajendra