【问题标题】:How to fix Web2Py "<class 'sqlite3.IntegrityError'>(foreign key constraint failed)"?如何修复 Web2Py “<class 'sqlite3.IntegrityError'>(外键约束失败)”?
【发布时间】:2019-10-26 09:13:39
【问题描述】:

我正在尝试将新记录添加到引用另一个表的数据库表中,并且我从 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')

我希望表单能够插入专辑,就像艺术家表单一样。

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

【问题讨论】:

    标签: python sqlite web2py


    【解决方案1】:

    最新的 Firefox 开发者版在 Web2Py 方面存在问题。

    我切换到 Chrome 并且一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 2021-06-29
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 2018-05-17
      • 2015-12-23
      相关资源
      最近更新 更多