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

are web2py Database Abstraction Layer (DAL) references on cascade by default?

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

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

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

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

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