使用web2py向外键添加空值时出现IntegrityError

3 投票
1 回答
1061 浏览
提问于 2025-04-16 21:10

我在使用web2py往一个叫Foods的表里插入记录时,遇到了一个完整性错误(IntegrityError)。这个表有一个外键指向Recipes,但我想在没有recipe_id的情况下添加一行数据。

<class 'gluon.contrib.pymysql.err.IntegrityError'>((1452, u'Cannot add or update a child row: a foreign key constraint fails (`pymeals`.`foods`, CONSTRAINT `foods_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipes` (`id`) ON DELETE CASCADE)'))

这是我的表

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| name      | varchar(255) | YES  |     | NULL    |                |
| recipe_id | int(11)      | YES  | MUL | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

我在web2py中用以下代码定义了这个表:

db.define_table('foods',
                Field('name'),
                Field('recipe_id', db.recipes, required=False, notnull=False, requires=None))

我觉得问题出在web2py上,因为我可以直接在mysql命令行中往Foods表里插入数据,而不需要指定recipe_id。

我是不是漏掉了什么?我对MySQL和web2py还很陌生 :(

1 个回答

0

确保你的食品和食谱使用的是相同的数据库引擎。如果你使用了不同的引擎,就会出现这个问题。

比如说,如果食品用的是MyISAM引擎,而食谱用的是InnoDB引擎,就会出错。

撰写回答