Crear tabla en SQLite solo si aún no existe


Respuestas:


484

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

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

3
Esto también funciona para los índices:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
Michael Scheper

1
¿qué tal si quiero hacer también un montón de inserciones solo si no existiera? Lo que quiero es crear una tabla derivada sobre la marcha si encuentro que no existe, sin tener que pagar un montón de instrucciones REPLACE cada vez.
Britton Kerin

1
@BrittonKerin, así que primero debes verificar si la tabla existe o no (esta es la clave, supongo ... el resto solo ejecuta tu código después de hacer la verificación condicional). Ver mi respuesta en las respuestas sobre esta condición.
aaronlhe

1

Voy a tratar de agregar valor a esta muy buena pregunta y construir sobre la pregunta de @ BrittonKerin en uno de los comentarios bajo la fantástica respuesta de @David Wolever. Quería compartir aquí porque tuve el mismo desafío que @BrittonKerin y obtuve algo que funciona (es decir, solo quiero ejecutar un fragmento de código solo SI la tabla no existe).

        # 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.