Web2py中组合键的最佳做法

问题描述 投票:1回答:1

安东尼在这里很好地回答了web2py中的组合键问题,但是我正在寻找他的答案中包含的警告的答案。 用他的回答提出primarykeyIS_NOT_IN_DB表单验证,并告诫(和进一步建议)是:

...以上内容不适用于表格中的任意插入,但主要用于用户输入提交。

您还可以使用SQL在表上设置多列唯一约束(您可以直接在数据库中或通过web2py .executesql()方法来执行此约束)。 但是,即使有这样的约束,您仍然希望在应用程序中进行一些输入验证,以避免数据库出错。

我为这些字段添加了CREATE UNIQUE INDEX 。 我的主要问题是,捕获将因这些错误而引发的异常的最佳方法是什么? 是否有一个(或几个)位置(S)我在哪里可以捕获该异常,当我尝试到数据库层将抛出INSERT记录(有重复键)用户表单(这将绕过之外IS_NOT_IN_DB检查/技术)? 还是我必须确保团队知道,当他们在该表上执行任何INSERT操作时,必须准备捕获该异常? 要么, ... ? 另外,如果我有两个用户试图插入这样的重复项, SQLFORM是否有一种简单的方法SQLFORM让我捕捉将引发的异常? (很抱歉所有新手问题。)

python web2py composite-key
1个回答
1
投票

当我尝试插入记录(使用重复键)时,是否有一个(或几个)地方可以捕获数据库层抛出的异常?

我不这么认为,但是您可以编写一个自定义函数来将这样的插入包换成try ... except(或检查其他重复键)。

另外,如果我有两个用户试图插入这样的重复项,SQLFORM中是否有一种简单的方法可以让我捕捉将引发的异常?

使用SQLFORM时,验证程序应捕获重复的提交尝试,并在表单上(对于第二个用户)返回错误。

© www.soinside.com 2019 - 2024. All rights reserved.