仅当它不存在时才在 SQLite 中创建表

Posted

技术标签:

【中文标题】仅当它不存在时才在 SQLite 中创建表【英文标题】:Create table in SQLite only if it doesn't exist already 【发布时间】:2011-05-05 02:57:29 【问题描述】:

我只想在 SQLite 数据库中创建一个不存在的表。有没有办法做到这一点?如果表存在,我不想删除它,只有在不存在时才创建它。

【问题讨论】:

Creating an SQLite table only if it doesn't already exist 的可能重复项 【参考方案1】:

来自http://www.sqlite.org/lang_createtable.html

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

【讨论】:

这也适用于索引:CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column); 如果我想只在它不存在的情况下也做一堆插入呢?如果我发现它不存在,我想要的是即时创建一个派生表,而无需每次都支付一堆 REPLACE 语句。 @BrittonKerin ,所以首先你必须检查表是否存在(这是我想的关键......其余的只是在进行条件检查后运行你的代码)。在这种情况下,请在答案中查看我的回复。【参考方案2】:

我将尝试为这个非常好的问题增加价值,并在@David Wolever 的精彩回答下的其中一个 cmets 中以@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

【讨论】:

以上是关于仅当它不存在时才在 SQLite 中创建表的主要内容,如果未能解决你的问题,请参考以下文章

仅当最小值小于另一表中的值时才在一个表中加入值 - 雪花

仅当前面有 (\d2 -) 时才在 html 中查找链接 (href) [重复]

MongoDb 仅当数组不为空时才在数组中添加字段

仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数

仅当所有文本字段都已填写时才在 Swift 中启用按钮

仅当 ANSI sql 不存在表时才创建表