Python sqlite3 variable de chaîne d'exécuter
J'essaie d'exécuter cette sqlite3 requête en Python. J'ai réduit le code pour le minimum, sqlite.se connecter, etc œuvres.
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)
Ce retourne une liste vide.
Si j'ai coder en dur les cordes, il fonctionne et renvoie des valeurs.
OriginalL'auteur Steffen | 2012-12-14
Vous devez vous connecter pour publier un commentaire.
Marqueurs de paramètres peut être utilisé que pour les expressions, c'est à dire, des valeurs.
Vous ne pouvez pas les utiliser pour les identificateurs comme la table et les noms de colonne.
Utiliser ceci:
ou ceci:
(Et ne pas s'engager avant d'avoir réellement fini d'accéder aux données.)
Oui, si vous permettez
column
ougoal
être contrôlée par un attaquant.OriginalL'auteur
Essayez ceci:
c.execute("SELECT {idf} FROM Data WHERE {goal}".\
format(idf=column, goal=constrain))
OriginalL'auteur
J'ai été tout à fait avoir un problème similaire aujourd'hui. Je ne suis pas sûr, si cela peut résoudre votre problème:
Important est la dernière ,
Lui donner un essai, c'était le problème avec mon code, donc peut-être qu'il vous aide aussi. Désolé, de ne pas pouvoir vraiment expliquer pourquoi, comme je suis juste moi-même l'apprentissage et je suis en python/sqlite pour quelques semaines.
,
à la fin n'est nécessaire que pour les tuples avec un seul élément, à différencier d'un simple expression.Merci, mais cela n'aide pas. Mais je peux vous expliquer quelque chose: C'est, parce que la valeur doit être un n-uplet.
OriginalL'auteur