2016-07-13 9 views
0

web2pyの新機能です。なぜコードがチケットを生成しているのかわかりません。Web2py 'Unique'制約がfalseに設定された後でも強制的に適用されています

私はjob_titleのために元々「一意」をtrueに設定していましたが、今の私のユースケースでは複製が許可される必要があります。私は 'unique'制約をfalseに変更しましたが、今度は複数の役職がチケットを生成します。

ここに私が得るチケットの例があります。

Ticket ID 
70.214.83.98.2016-07-13.22-35-40.452ce905-fbd9-4ecb-b830-04be06fc0d7a 

<class 'sqlite3.IntegrityError'> UNIQUE constraint failed: job.job_title 

Version 
web2py™ Version 2.14.5-stable+timestamp.2016.04.14.03.26.16 
Python Python 2.7.6: /usr/local/bin/uwsgi (prefix: /usr) 

トレースバック

Traceback (most recent call last): 
    File "/home/kramer52/web2py/gluon/restricted.py", line 227, in restricted 
exec ccode in environment 
    File "/home/kramer52/web2py/applications/Jobs_test/controllers/appadmin.py", line 703, in <module> 
    File "/home/kramer52/web2py/gluon/globals.py", line 417, in <lambda> 
self._caller = lambda f: f() 
    File "/home/kramer52/web2py/applications/Jobs_test/controllers/appadmin.py", line 151, in insert 
if form.accepts(request.vars, session): 
    File "/home/kramer52/web2py/gluon/sqlhtml.py", line 1746, in accepts 
self.vars.id = self.table.insert(**fields) 
    File "/home/kramer52/web2py/gluon/packages/dal/pydal/objects.py", line 726, in insert 
ret = self._db._adapter.insert(self, self._listify(fields)) 
    File "/home/kramer52/web2py/gluon/packages/dal/pydal/adapters/base.py", line 746, in insert 
raise e 
IntegrityError: UNIQUE constraint failed: job.job_title 

そして、ここが私のテーブル定義である:

db.define_table('job', 
      Field('job_title', length=200, unique=False, requires=IS_NOT_EMPTY()), 
      Field('job_department', 'reference department'), 
      Field('job_flsa_status', requires=IS_IN_SET(['Exempt', 'Non-Exempt'], zero=None)), 
      Field('job_pay_type', requires=IS_IN_SET(['Hourly', 'Salaried'], zero=None)), 
      Field('job_salary_low', 'decimal(10,2)', label='Salary (low)'), 
      Field('job_salary_high', type='decimal(10,2)', label='Salary (High)'), 
      Field('job_summary', type='text'), 
      Field('job_years_requirement', 'integer', requires=IS_INT_IN_RANGE(0, 50), default=5, label='Years Required'), 
      Field('job_education_requirement', requires=IS_IN_SET(['Some HS', 'HS Diploma', 'Some College','Associates Degree','College Degree B.A.', 'College Degree B.S.', 'Masters Degree'], zero=None), label='Education'), 
      Field('job_education_requirement_required', 'boolean', default=False, label='Required?'), 
      auth.signature) 

は以前、私はユニークな設定していた=のjob_titleと形式=のための真の '%(のjob_title)s' のジョブテーブル、私はそれ以来 'フォーマット'を削除しました

答えて

0

すべてのデータベースが制約(SQLiteなど)を削除できるわけではないので、unique=True DALが最初にテーブルを作成したときに、後でunique=Falseを設定しても効果はありません。代わりに、他の手段を使用して制約を削除する必要があります(SQLiteの場合は、データをエクスポートし、テーブル全体を削除して再作成し、保存したデータをインポートしてください)。

+0

ご回答ありがとうございます。私はそれがMYSQLのデータベースであると述べたはずですが、私はテーブルを削除し、再作成してデータを挿入しました。常識ですが、とにかくありがとうございます。どのようにそれがMYSQLになることができるかわからないが、私はSQLのライトエラーを取得しています....それは困惑です。 –

関連する問題