Utwórz tabelę w SQLite tylko wtedy, gdy jeszcze nie istnieje

Odpowiedzi:

483

Ze strony http://www.sqlite.org/lang_createtable.html :

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
David Wolever
źródło
3
Działa to również w przypadku indeksów:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper
1
co powiesz na to, że jeśli chcę, to także zrobić kilka wstawek tylko wtedy, gdy nie istniał? Chcę stworzyć tabelę pochodną w locie, jeśli okaże się, że ona nie istnieje, bez konieczności płacenia za kilka instrukcji REPLACE za każdym razem.
Britton Kerin,
1
@BrittonKerin, więc najpierw musisz sprawdzić, czy tabela istnieje, czy nie (jest to klucz, jak sądzę ... reszta po prostu uruchamia kod po wykonaniu kontroli warunkowej). Zobacz moją odpowiedź w odpowiedzi na ten warunek.
aaronlhe
1

Spróbuję wnieść wartość dodaną do tego bardzo dobrego pytania i oprzeć się na pytaniu @ BrittonKerin w jednym z komentarzy pod fantastyczną odpowiedzią Davida Wolvera. Chciałem się tutaj podzielić, ponieważ miałem takie samo wyzwanie jak @BrittonKerin i dostałem coś działającego (tj. Po prostu chcę uruchomić fragment kodu tylko, jeśli tabela nie istnieje).

        # 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
źródło