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