2013-03-28 52 views
1

我想用python创建一个sqlite3表。我的代码如下:sqlite3.OperationalError:没有这样的表

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 

我不知道发生了什么问题。任何人都可以帮忙吗?

回答

2

丢弃modules首先使外键约束modulesfiles无效。

先放下子表。

+0

OH。那就对了。应该会发生在我身上。谢谢! –

相关问题