Créer une table dans SQLite uniquement si elle n'existe pas déjà

Réponses:

484

Sur http://www.sqlite.org/lang_createtable.html :

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
David Wolever
la source
3
Cela fonctionne aussi pour les indices:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper
1
que diriez-vous si je veux ensuite faire un tas d'inserts seulement s'il n'existait pas? Ce que je veux, c'est créer une table dérivée à la volée si je trouve qu'elle n'existe pas, sans payer pour un tas d'instructions REPLACE à chaque fois.
Britton Kerin
1
@BrittonKerin, donc vous devez d'abord vérifier si la table existe ou non (c'est la clé, je suppose ... le reste exécute simplement votre code après avoir effectué la vérification conditionnelle). Voyez ma réponse dans les réponses à cette condition.
aaronlhe
1

Je vais essayer d'ajouter de la valeur à cette très bonne question et de construire sur la question de @ BrittonKerin dans l'un des commentaires sous la réponse fantastique de @David Wolever. Je voulais partager ici parce que j'avais le même défi que @BrittonKerin et que j'avais quelque chose qui fonctionnait (c'est-à-dire que je veux juste exécuter un morceau de code uniquement si la table n'existe pas).

        # for completeness lets do the routine thing of connections and cursors
        conn = sqlite3.connect(db_file, timeout=1000) 

        cursor = conn.cursor() 

        # get the count of tables with the name  
        tablename = 'KABOOM' 
        cursor.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name=? ", (tablename, ))

        print(cursor.fetchone()) # this SHOULD BE in a tuple containing count(name) integer.

        # check if the db has existing table named KABOOM
        # if the count is 1, then table exists 
        if cursor.fetchone()[0] ==1 : 
            print('Table exists. I can do my custom stuff here now.... ')
            pass
        else: 
           # then table doesn't exist. 
           custRET = myCustFunc(foo,bar) # replace this with your custom logic
aaronlhe
la source