无法通过python向mysql表添加外键
我试图在MySQL中创建三个表,下面是代码无法通过python向mysql表添加外键,python,mysql,Python,Mysql,我试图在MySQL中创建三个表,下面是代码 TABLES['MACHINE'] = ( "CREATE TABLE `MACHINE` (" " `id` int NOT NULL AUTO_INCREMENT," " `x` int NOT NULL ," " `y` int NOT NULL," " `machineid` varchar(255) NOT NULL," " `sitename` varchar(255) NOT NU
TABLES['MACHINE'] = (
"CREATE TABLE `MACHINE` ("
" `id` int NOT NULL AUTO_INCREMENT,"
" `x` int NOT NULL ,"
" `y` int NOT NULL,"
" `machineid` varchar(255) NOT NULL,"
" `sitename` varchar(255) NOT NULL,"
" `version_PK` int NOT NULL,"
" `type` varchar(255) NOT NULL,"
" `r` varchar(255) NOT NULL,"
" `s` varchar(255) NOT NULL,"
" `re` varchar(255) NOT NULL,"
" `dd` DATETIME NOT NULL,"
" `country` varchar(255) NOT NULL,"
" `latitude` float ,"
" `longitude` float ,"
" PRIMARY KEY (`id`),"
" unique key (`machineid`)"
") ENGINE=InnoDB")
TABLES['JOB'] = (
"CREATE TABLE `JOB` ("
" `id` int NOT NULL AUTO_INCREMENT,"
" `machine_id` varchar(255) NOT NULL,"
" `sl` int NOT NULL,"
" `sc` int NOT NULL,"
" `vercsion_PK` int NOT NULL,"
" PRIMARY KEY (`id`),"
" CONSTRAINT `JOB_1` FOREIGN KEY (`machine_id`) "
" REFERENCES `MACHINE` (`machineid`) ON DELETE CASCADE"
") ENGINE=InnoDB")
TABLES['SCAN_PASS'] = (
"CREATE TABLE `SCAN_PASS` ("
" `id` int NOT NULL AUTO_INCREMENT,"
" `job_id` int NOT NULL,"
" `dates` DATETIME NOT NULL,"
" `pass` int NOT NULL,"
" `rawdata` varchar(255) NOT NULL,"
" `units` varchar(255) NOT NULL,"
" `afterpass` int NOT NULL,"
" `version_PK` int NOT NULL,"
" PRIMARY KEY (`id`),"
" CONSTRAINT `SCAN_1` FOREIGN KEY (`job_id`) "
" REFERENCES `JOB` (`id`) ON DELETE CASCADE"
") ENGINE=InnoDB")
for name, ddl in TABLES.iteritems():
cursor.execute(ddl)
cursor.close()
db.close()
问题是我在运行代码“IntegrityError:(1215,'不能添加外键约束')时遇到此错误。”
让我困惑的是,当我将第三个表的名称更改为scan_pass以外的任何其他名称时。一切似乎都很好。
这段代码生成数据库,然后创建这些表,我只是没有包含生成数据库的代码。此外,MySQL服务器中没有其他表在任何其他数据库中具有相同的名称“scan_pass”。
为什么它只在表名为“scan_pass”时才抱怨?我真的需要一张有这个名字的桌子。
谢谢你事先的帮助我觉得很好。实际上,我自己运行了三个创建表。它顺利通过了。我假设它们最初并不存在。也许是缓存问题?但有一件事,若你们在机器表中有id,你们有理由不在作业中使用它的id作为FK吗?如果使用machineid列作为FK,则不需要MACHINE中的id。谢谢,您知道如何解决缓存问题吗?有什么办法吗?