安东尼在这里很好地回答了web2py中的组合键问题,但是我正在寻找他的答案中包含的警告的答案。 用他的回答提出primarykey
和IS_NOT_IN_DB
表单验证,并告诫(和进一步建议)是:
...以上内容不适用于表格中的任意插入,但主要用于用户输入提交。
您还可以使用SQL在表上设置多列唯一约束(您可以直接在数据库中或通过web2py .executesql()方法来执行此约束)。 但是,即使有这样的约束,您仍然希望在应用程序中进行一些输入验证,以避免数据库出错。
我为这些字段添加了CREATE UNIQUE INDEX
。 我的主要问题是,捕获将因这些错误而引发的异常的最佳方法是什么? 是否有一个(或几个)位置(S)我在哪里可以捕获该异常,当我尝试到数据库层将抛出INSERT
记录(有重复键)用户表单(这将绕过之外IS_NOT_IN_DB
检查/技术)? 还是我必须确保团队知道,当他们在该表上执行任何INSERT操作时,必须准备捕获该异常? 要么, ... ? 另外,如果我有两个用户试图插入这样的重复项, SQLFORM
是否有一种简单的方法SQLFORM
让我捕捉将引发的异常? (很抱歉所有新手问题。)
当我尝试插入记录(使用重复键)时,是否有一个(或几个)地方可以捕获数据库层抛出的异常?
我不这么认为,但是您可以编写一个自定义函数来将这样的插入包换成try ... except(或检查其他重复键)。
另外,如果我有两个用户试图插入这样的重复项,SQLFORM中是否有一种简单的方法可以让我捕捉将引发的异常?
使用SQLFORM时,验证程序应捕获重复的提交尝试,并在表单上(对于第二个用户)返回错误。