2010-03-01 18 views
6

Je dois exécuter en python une requête SQL qui ajoute une nouvelle colonne, dans sqlite3.ALTER TABLE Sqlite: comment vérifier si une colonne existe avant de modifier la table?

Le problème est que parfois il existe déjà. Donc, avant d'exécuter la requête, j'ai besoin de vérifier si la colonne existe déjà.

Si c'est le cas, je n'exécuterai pas la requête.

Existe-t-il un moyen de faire cela en sqlite? Ou dois-je passer à travers un bloc try-catch en code python?

Merci beaucoup d'avance!

Répondre

12

Vous pouvez obtenir une liste de colonnes pour une table via la déclaration suivante:

PRAGMA table_info('table_name'); 

Plus de détails sur les commandes de Pragma sont availabel à the sqlite web site

+0

+1 pour une réponse claire et simple –

+0

La question est étiquetée 'python' mais cela ne vous montre pas comment procéder en Python – user5359531

11

OMI,

conn = sqlite3.connect(':memory:') 
c = conn.cursor() 
try: 
    c.execute('ALTER TABLE mytable ADD COLUMN newcolumn;') 
except: 
    pass # handle the error 
c.close() 

est un meilleur choix que la construction de cas spéciaux requêtes.

Vous pouvez envelopper le code ci-dessus dans une fonction AddColumn (curseur, table, colonne) afin de pouvoir le réutiliser,
et cela rendra le code plus lisible.