Crie tabela no SQLite apenas se ela já não existir


Respostas:


483

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

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

3
Isso também funciona para índices:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper 22/10

1
Que tal se eu quiser fazer um monte de inserções somente se elas não existirem? O que eu quero é criar uma tabela derivada em tempo real, se eu achar que ela não existe, sem pagar por um monte de instruções REPLACE sempre.
Britton Kerin

1
@BrittonKerin, primeiro você deve verificar se a tabela existe ou não (esta é a chave que suponho ... o resto está apenas executando o seu código depois de fazer a verificação condicional). Veja minha resposta nas respostas sobre essa condição.
aaronlhe

1

Vou tentar agregar valor a essa pergunta muito boa e aproveitar a pergunta de @ BrittonKerin em um dos comentários na resposta fantástica de @David Wolever. Queria compartilhar aqui porque tive o mesmo desafio que o @BrittonKerin e consegui algo funcionando (ou seja, só quero executar um pedaço de código apenas se a tabela não existir).

        # 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.