web2py中复合键的最佳实践

时间:2012-06-25 17:34:10

标签: python web2py composite-key

web2py中的复合键问题是answered pretty well by Anthony here,但我正在寻找他在答案中包含的警告的答案。他的回答建议在表单验证中使用primarykeyIS_NOT_IN_DB,并且警告(以及进一步的建议)是:

  

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

     

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

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

1 个答案:

答案 0 :(得分:1)

  

是否有一个(或几个)地方可以捕获异常   当我尝试INSERT一条记录时,db层将抛出(带有   重复的密钥)?

我不这么认为,但你可以编写一个自定义函数来包装这样的插入在try ...中除外(或者检查重复键)。

  

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

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