Buat tabel dalam SQLite hanya jika belum ada

Jawaban:

484

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

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
David Wolever
sumber
3
Ini berfungsi untuk indeks juga:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper
1
bagaimana jika saya ingin kemudian melakukan banyak sisipan hanya jika tidak ada? Yang saya inginkan adalah membuat tabel turunan dengan cepat jika saya menemukan itu tidak ada, tanpa membayar banyak pernyataan REPLACE setiap saat.
Britton Kerin
1
@BrittonKerin, jadi pertama Anda harus memeriksa apakah tabel ada atau tidak (ini kuncinya saya kira ... sisanya hanya menjalankan kode Anda setelah melakukan pemeriksaan bersyarat). Lihat jawaban saya dalam jawaban tentang kondisi ini.
aaronlhe
1

Saya akan mencoba dan menambah nilai untuk pertanyaan yang sangat bagus ini dan untuk membangun pertanyaan @ BrittonKerin di salah satu komentar di bawah jawaban fantastis @David Wolever. Ingin berbagi di sini karena saya memiliki tantangan yang sama dengan @BrittonKerin dan saya mendapatkan sesuatu yang berfungsi (yaitu hanya ingin menjalankan sepotong kode saja JIKA tabel tidak ada).

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