sqlite3.OperationalError:没有这样的表

时间:2013-03-28 22:58:54

标签: python-2.7 sqlite

我正在尝试使用python创建一个sqlite3表。我的代码如下:

def initDb():
    database = 'index.db'
    conn = sqlite3.connect(database)

    cur = conn.cursor()

    # Initialize database
    cur.execute('PRAGMA foreign_keys = ON')

    cur.execute('DROP TABLE IF EXISTS modules')
    cur.execute('DROP TABLE IF EXISTS files')
    cur.execute('DROP TABLE IF EXISTS modulesfiles')

    cur.execute(
        '''CREATE TABLE modules (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            label TEXT UNIQUE NOT NULL
        )'''
    )
    cur.execute(
        '''CREATE TABLE files (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            filename TEXT UNIQUE NOT NULL
        )'''
    )
    cur.execute(
        '''CREATE TABLE modulesfiles (
        module INTEGER UNIQUE NOT NULL,
        file INTEGER UNIQUE NOT NULL,
        PRIMARY KEY (module,file),
        FOREIGN KEY (module) REFERENCES modules(id) ON UPDATE CASCADE ON DELETE CASCADE,
        FOREIGN KEY (file) REFERENCES files(id) ON UPDATE CASCADE ON DELETE CASCADE
        )'''
    )

    cur.close()

    return conn

if __name__ == '__main__':
    conn = initDb()
    conn.commit()
    conn.close()

第一次运行它并创建数据库时,此代码运行正常。但是,如果我再次运行它,我会收到以下错误:

    cur.execute('DROP TABLE IF EXISTS files')
sqlite3.OperationalError: no such table: main.modules

我不知道出了什么问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

首先删除modules会使modulesfiles中的外键约束无效。

首先删除子表。

相关问题