默认情况下,级联上的 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) 引用是啥?的主要内容,如果未能解决你的问题,请参考以下文章