2013-03-28 49 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。那就對了。應該會發生在我身上。謝謝! –

相關問題