1

web2pyの複合キーの質問は、ここでAnthonyによってかなりよく答えられましたが、彼の答えに含まれている警告に対する答えを探しています。彼の答えは、フォーム検証の使用primarykeyと使用を提案しIS_NOT_IN_DB、警告(およびさらなる提案)は次のとおりでした。

...上記は、テーブルへの任意の挿入では機能しませんが、主にユーザー入力の送信を目的としています。

SQLを使用して、テーブルに複数列の一意性制約を設定することもできます(これは、データベースで直接行うか、web2py .executesql()メソッドを介して行うことができます)。ただし、このような制約がある場合でも、データベースからのエラーを回避するために、アプリケーション内で入力検証を行う必要があります。

CREATE UNIQUE INDEXフィールドにを追加しました。私の主な質問は、これらのエラーに対してスローされる例外をキャッチするための最良の方法は何ですか?ユーザーフォーム(チェック/テクニックINSERTをバイパスする)の外部で(重複キーを使用して)レコードを作成しようとしたときにdbレイヤーがスローする例外をキャッチできる単一(またはいくつか)の場所はありますか? IS_NOT_IN_DB?または、このテーブルでINSERTを実行するときに、その例外をキャッチする準備をする必要があることをチームが認識していることを確認する必要がありますか?または、 ... ?また、そのような重複を挿入しようとしている2人のユーザーがいる場合、SQLFORMスローされる例外をキャッチする簡単な方法はありますか?(初心者の質問はすべて申し訳ありません。)

4

1 に答える 1

1

(重複キーを使用して) レコードを INSERT しようとしたときに db レイヤーがスローする例外をキャッチできる単一 (またはいくつか) の場所はありますか?

私はそうは思いませんが、そのような挿入を try...except でラップするカスタム関数を作成できます (または重複キーをチェックします)。

また、そのような重複を挿入しようとしているユーザーが 2 人いる場合、SQLFORM でスローされる例外をキャッチする簡単な方法はありますか?

SQLFORM を使用する場合、バリデーターは重複した送信試行をキャッチし、フォームでエラーを返す必要があります (2 番目のユーザーの場合)。

于 2012-06-25T21:54:44.823 に答える