如何修复Web2Py“ <class'sqlite3.IntegrityError'>(外键约束失败)”?

时间:2019-06-11 22:13:57

标签: python sqlite web2py

我试图将新记录添加到引用另一个表的数据库表中,并且从Web2Py收到此错误:“(外键约束失败)”。

我正在遵循Web2Py图书示例,如下所示:

  

第7章:表格和验证器

     

链接到引用记录

     

现在考虑由参考字段链接的两个表的情况。对于   例如:

db.define_table('person',
   Field('name', requires=IS_NOT_EMPTY()))
db.define_table('dog',
   Field('owner', 'reference person'),
   Field('name', requires=IS_NOT_EMPTY()))
db.dog.owner.requires = IS_IN_DB(db, 'person.id', '%(name)s')
     

一个人有狗,每只狗都属于一个人的主人。狗的主人必须通过'%(name)s'引用有效的db.person.id。

这是我感到困惑的地方,因为除非我真的不遗漏我的错误,否则我相信我会遵循该示例。

我正在使用的模型如下。

我正在尝试创建一张专辑,该专辑要求歌手存在,而该歌手的唱片必须通过表格存在。

db.define_table('artist',
               Field('name', requires=(IS_SLUG(),
                                       IS_NOT_IN_DB(db, 'artist.name'))),
               auth.signature)

# IS_SLUG removes special chars, IS_NOT_IN_DB makes it unique
db.define_table('album',
               Field('name', requires=(IS_SLUG(),
                                       IS_NOT_IN_DB(db, 'album.name'))),
               Field('artist_id', 'reference artist'), ### HERE ###
               Field('album_art', 'upload'),
               Field('chapter', 'integer', requires=IS_NOT_EMPTY()),
               Field('act', 'integer', default=0),
               Field('release_date', 'date', requires=IS_NOT_EMPTY()),
               Field('num_of_tracks', 'integer', default=0),
               auth.signature)

db.album.artist_id.requires = IS_IN_DB(db, 'artist.id', '%(name)s')

我希望表格可以插入专辑,就像歌手表格一样。

我知道引用是引起此问题的原因,如果有人可以帮助我查看我的错误,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

最新的Firefox开发人员版Web2Py出现问题。

我切换到Chrome,一切正常。

相关问题