Erstellen Sie eine Tabelle in SQLite nur, wenn sie noch nicht vorhanden ist

Antworten:

482

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

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
David Wolever
quelle
3
Dies funktioniert auch für Indizes:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper
1
Wie wäre es, wenn ich dann auch nur ein paar Einfügungen machen möchte, wenn es nicht existiert? Was ich möchte, ist, eine abgeleitete Tabelle im laufenden Betrieb zu erstellen, wenn ich feststelle, dass sie nicht vorhanden ist, ohne jedes Mal für eine Reihe von REPLACE-Anweisungen zu bezahlen.
Britton Kerin
1
@BrittonKerin, also musst du zuerst prüfen, ob die Tabelle existiert oder nicht (dies ist der Schlüssel, nehme ich an ... der Rest führt nur deinen Code aus, nachdem du die bedingte Prüfung durchgeführt hast). Sehen Sie meine Antwort in den Antworten unter dieser Bedingung.
Aaronlhe
1

Ich werde versuchen, dieser sehr guten Frage einen Mehrwert zu verleihen und auf der Frage von @ BrittonKerin in einem der Kommentare unter @David Wolevers fantastischer Antwort aufzubauen. Wollte hier teilen, weil ich die gleiche Herausforderung wie @BrittonKerin hatte und etwas funktionierte (dh nur einen Teil des Codes ausführen möchte, wenn die Tabelle nicht existiert).

        # 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
quelle