1

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

何が問題なのかわかりません。誰でも助けることができますか?

4

1 に答える 1

2

最初にドロップmodulesすると、外部キー制約がmodulesfiles無効になります。

最初に子テーブルをドロップします。

于 2013-03-29T07:12:44.150 に答える