默认情况下,级联上的 web2py 数据库抽象层 (DAL) 引用是啥?

Posted

技术标签:

【中文标题】默认情况下,级联上的 web2py 数据库抽象层 (DAL) 引用是啥?【英文标题】:are web2py Database Abstraction Layer (DAL) references on cascade by default?默认情况下,级联上的 web2py 数据库抽象层 (DAL) 引用是什么? 【发布时间】:2019-06-04 06:09:40 【问题描述】:

当我使用 DAL 在 web2py 中创建数据库时,例如,我在我的网站上为用户 cmets 创建了一个表,并且我需要能够获取发送该特定评论的用户,我可以通过电子邮件来完成.. 但是,电子邮件可能会随时间而变化(可能的选项),如果电子邮件未在所有使用该电子邮件作为该用户的一对一参考的“子”表上更新,则数据库本身可能最终会寻找不存在的用户。 出于这个原因,我需要自动更新子表中的所有外键,所以这个功能(更新外键的级联)是否存在,并且在使用 DAL 时默认情况下/是否可以告诉 DAL 连接通过在需要的Field("name", type="type", notnull=True, updateoncascade=True) 字段中添加updateoncascade=True

【问题讨论】:

【参考方案1】:

DAL 在创建表时不提供 API 来指定 ON UPDATE CASCADE,因此您必须在外部执行此操作。或者,您可以使用_after_update hook 来更新任何子表中的记录。

还要考虑是否要在电子邮件地址上设置外键,而不是使用内置的reference 字段功能,该功能会在父表的id 字段上创建外键。因为给定用户记录的id 永远不会改变,所以您不必担心级联更新:

db.define_table('comments',
    ...,
    Field('author', 'reference auth_user'))

上面,'reference auth_user'db.auth_user.id 字段设置了一个外键。

【讨论】:

这意味着我不需要更新用户表上的电子邮件,因为“子”表上的所有内容都与 define table 中自动生成的 ID 相关,如果我没看错吧?

以上是关于默认情况下,级联上的 web2py 数据库抽象层 (DAL) 引用是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JPA 2.1 外键没有保存在 ManyToOne 级联上

删除级联在这种情况下不起作用[重复]

Hibernate关联关系 Cascade级联

Hibernate级联操作

Laravel:级联删除模型,如果没有其他模型共享它

Azure 应用服务上的 Web2py 项目部署