2016-07-13 3 views
0

Ich bin sehr neu zu web2py und ich kann nicht herausfinden, warum mein Code ein Ticket generiert, kann jemand bitte helfen?Web2py 'Unique' Constraint wird immer noch erzwungen, nachdem auf false gesetzt

Ursprünglich hatte ich "unique" auf "true" für job_title gesetzt, aber mein Anwendungsfall für die nun erfordert, dass Duplikate zulässig sind. Ich habe die Einschränkung 'unique' in 'false' geändert, jetzt generieren doppelte Jobtitel ein Ticket.

Hier ist ein Beispiel für das Ticket, das ich bekomme.

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

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 

Und hier ist meine Tabellendefinition:

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) 

Vorher hatte ich für das einzigartige = true für job_title und Format = '% (job_title) s' gesetzt Job-Tabelle, habe ich seitdem "Format" entfernt

Antwort

0

Nicht alle Datenbanken unterstützen das Löschen von Einschränkungen (zB SQLite), also wenn Sie 01 setzenWenn die DAL anfänglich die Tabelle erstellt, hat die spätere Einstellung unique=False keine Auswirkung. Stattdessen müssen Sie die Einschränkung auf andere Weise löschen (oder im Fall von SQLite die Daten exportieren, die gesamte Tabelle löschen und neu erstellen und dann die gespeicherten Daten importieren).

+0

Danke für Ihre Antwort. Ich hätte sagen sollen, dass es sich um eine MYSQL-Datenbank handelt, aber ich habe die Tabelle fallen lassen, neu erstellt und die Daten eingefügt, und es hat gut funktioniert. Gesunder Menschenverstand, ich weiß, aber danke trotzdem. Nicht sicher, wie es MYSQL sein könnte, aber ich bekomme einen SQL-Lite-Fehler .... das ist rätselhaft. –

Verwandte Themen