Создать таблицу в SQLite, только если она еще не существует

275

Я хочу создать таблицу в базе данных SQLite, только если она еще не существует. Есть какой-либо способ сделать это? Я не хочу отбрасывать таблицу, если она существует, только создавать ее, если ее нет.

user461112
источник

Ответы:

484

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

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
Дэвид Волевер
источник
3
Это работает и для индексов:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Майкл Шепер
1
как насчет того, если я захочу сделать кучу вставок, только если они не существуют? Я хочу создать производную таблицу на лету, если обнаружу, что ее не существует, не платя каждый раз за кучу операторов REPLACE.
Бриттон Крейн
1
@BrittonKerin, поэтому сначала вы должны проверить, существует ли таблица или нет (я полагаю, это ключ ... остальное - просто выполнение вашего кода после выполнения условной проверки). Смотрите мой ответ в ответах на это условие.
aaronlhe
1

Я собираюсь попытаться повысить ценность этого очень хорошего вопроса и развить вопрос @ BrittonKerin в одном из комментариев под фантастическим ответом @David Wolever. Хотел поделиться здесь, потому что у меня была та же проблема, что и у @BrittonKerin, и я получил кое-что работающее (то есть просто хочу запустить кусок кода только если таблицы не существует).

        # 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
источник