7
votes

Alter Table SQLite: Comment vérifier si une colonne existe avant de modifier la table?

Je dois exécuter dans Python une requête SQL qui ajoute une nouvelle colonne, dans SQLite3.

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

Si cela le fait, je ne vais pas exécuter la requête.

Y a-t-il un moyen de faire ça? Ou dois-je faire passer un bloc d'essai dans le code Python?

Merci beaucoup à l'avance!


0 commentaires

3 Réponses :


15
votes

Vous pouvez obtenir une liste de colonnes pour une table via l'instruction suivante:

PRAGMA table_info('table_name');


1 commentaires

La question est étiquetée 'python' mais cela ne vous montre pas comment faire cela en python



14
votes

imo ceci xxx

est un meilleur choix que de construire cas spécial requêtes.

Vous pouvez envelopper le code ci-dessus dans une fonction addColumn (curseur, table, colonne) afin que vous puissiez la réutiliser,
De plus, cela rendra le code plus lisible.


0 commentaires

0
votes

Pour une raison quelconque, vous voulez un moyen explicitement de vérifier si une colonne est déjà présente, vous pouvez trouver une recette python complète ci-dessous. Jusqu'à vous pour envelopper le code dans une fonction ou l'améliorer

import sqlite3

sqlite_db = 'my_sqlite_db.sqlite'
col_to_test = 'my_column'
table_to_test = 'my_table_name'

con = sqlite3.connect(sqlite_db)
check_sqlite_col_exist_query = """SELECT count(*) > 0
FROM pragma_table_info('{}')
WHERE name=?;""".format

with con:
    q = con.execute(check_sqlite_col_exist_query(table_to_test), (col_to_test, ))
    col_exist = q.fetchone()
    col_exist = col_exist[0] > 0
    if not col_exist:
        print('"{}" column does not exist in table "{}"!'.format(col_to_test, table_to_test))
        # Do stuff here like adding your column or something else
    else:
        print('"{}" column already exist in table "{}"!'.format(col_to_test, table_to_test))


0 commentaires