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);
マイケルScheper

1
それが存在しなかった場合にのみ、一連の挿入も行いたい場合はどうでしょうか?必要なのは、毎回REPLACEステートメントの束を払うことなく、存在しないことがわかった場合にその場で派生テーブルを作成することです。
ブリトンKerin

1
@BrittonKerinなので、最初にテーブルが存在するかどうかを確認する必要があります(これが私が想定するキーです...残りは条件チェックを実行した後にコードを実行しているだけです)。この条件での回答に私の返信を参照してください。
aaronlhe

1

この非常に良い質問に価値を加え、@ David Woleverの素晴らしい回答の下にあるコメントの1つで@BrittonKerinの質問を基にしていきます。@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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.