无法通过python向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

我试图在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 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。谢谢,您知道如何解决缓存问题吗?有什么办法吗?