Створіть таблицю в SQLite, лише якщо вона вже не існує


275

Я хочу створити таблицю в базі даних SQLite, лише якщо вона ще не існує. Чи можна це зробити? Я не хочу скидати таблицю, якщо вона існує, лише створюйте її, якщо її немає.


Відповіді:


483

Від 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.