1

Anthony here 很好地回答了 web2py 中复合键的问题,但我正在寻找他在回答中包含的警告的答案。他的回答建议在表单验证中使用primarykeyIS_NOT_IN_DB,警告(和进一步的建议)是:

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

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

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

4

1 回答 1

1

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

我不这么认为,但是您可以编写一个自定义函数来将此类插入包装在 try...except 中(或以其他方式检查重复键)。

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

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

于 2012-06-25T21:54:44.823 回答