2013-03-28 8 views
1

파이썬을 사용하여 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. 맞습니다. 나 한테 일어 났어야 했어. 감사! –

관련 문제