Yalnızca zaten yoksa SQLite'de tablo oluşturma


Yanıtlar:


483

Gönderen http://www.sqlite.org/lang_createtable.html :

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);

3
Bu endeksler için de geçerlidir:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper

1
o zaman sadece bir tane yoksa ekler yapmak istersem ne olur? İstediğim her seferinde bir grup REPLACE ifadesi için ödeme yapmadan, bulunmazsa anında türetilmiş bir tablo oluşturmaktır.
Britton Kerin

1
@BrittonKerin, bu yüzden önce tablonun var olup olmadığını kontrol etmeniz gerekir (bu sanırım anahtar ... geri kalan sadece koşullu kontrol yaptıktan sonra kodunuzu çalıştırıyor). Bu durumun cevaplarında cevabımı gör.
aaronlhe

1

Bu çok iyi soruya değer katmaya çalışacağım ve @David Wolever'ın fantastik cevabı altındaki yorumlardan birinde @ BrittonKerin'in sorusu üzerine inşa edeceğim. @BrittonKerin ile aynı zorluk yaşadığım için burada paylaşmak istedim ve çalışan bir şey aldım (yani sadece tablo yoksa EĞER bir kod parçası çalıştırmak istiyorum).

        # 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.