我正在尝试使用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
我不知道出了什么问题。有人可以帮忙吗?
答案 0 :(得分:2)
首先删除modules
会使modulesfiles
中的外键约束无效。
首先删除子表。