2010-10-28 2 views
1

J'ai un programme python3 que je suis en train d'utiliser et qui utilise une base de données sqlite avec plusieurs tables, je veux créer un module de sélection pour me permettre de choisir de quelle table tirer les données.Comment puis-je contourner ne pas être en mesure d'analyser un nom de table dans une requête python sqlite?

J'ai découvert que je ne peux pas utiliser de substitution de paramètres pour un nom de table comme indiqué ci-dessous, donc je suis à la recherche de méthodes alternatives pour y parvenir.

c.execute("SELECT * FROM ? ", DB) 

Des idées?

Répondre

1

Droite. Vous ne pouvez pas utiliser la substitution de paramètre pour spécifier la table. Ainsi, au lieu vous devez faire la manipulation de chaînes:

c.execute("SELECT * FROM {t} ".format(t=tablename)) 
1

-je faire pour le faire savoir pas si cela est une chose python3, mais il semble plus facile ceci:

c.execute("SELECT * FROM %s "% tablename) 
+0

Non, c'est une chose sqlite, et c'est assez typique pour la plupart des interfaces db. Les paramètres de requête sont généralement juste pour se connecter à la place des valeurs littérales, dans les clauses INSERT ou WHERE, pas pour les références de table ou de colonne. – PaulMcG

+0

Par python3 je veux dire que j'utilise python version 3. Je specidfied parce que la syntaxe est un peu différente de la version 2. – Higbasa

+0

Paul a raison, c'est pourquoi je suis à la recherche d'un plan d'action alternatif. Jusqu'à présent, tout ce que j'ai trouvé est un imbriqué si statment chacun avec sa propre requête sqlite. – Higbasa

0

Blockquote * droit. Vous ne pouvez pas utiliser la substitution de paramètre pour spécifier la table. Donc, au lieu vous devez faire des manipulations de chaînes : c.execute ("SELECT * FROM {t}" .format (t = tablename)) * Blockquote

Merci unutbu, c'est exactement ce que je avais besoin.

+0

Vous pouvez accepter sa réponse en cliquant sur la coche en dessous. De cette façon, il aura le crédit. – Joshkunz

Questions connexes