Dear web2py-users, I tried to create the database schema of my application by adding the following code in db.py ; I am pasting the entire code, but in fact the problem appears already at the first table definition, because te ticket I get is the following:
Traceback (most recent call last): File "/home/mike/web2py/gluon/restricted.py", line 186, in restricted exec ccode in environment File "/home/mike/web2py/applications/TurniPS/models/db.py", line 28, in <module> Field('OrarioSett','integer',default='38')) File "/home/mike/web2py/gluon/sql.py", line 1359, in define_table t._create(migrate=migrate, fake_migrate=fake_migrate) File "/home/mike/web2py/gluon/sql.py", line 1845, in _create fake_migrate=fake_migrate) File "/home/mike/web2py/gluon/sql.py", line 1914, in _migrate self._db._execute(sub_query) File "/home/mike/web2py/gluon/sql.py", line 947, in <lambda> self._execute = lambda *a, **b: self._cursor.execute(*a, **b) OperationalError: duplicate column name: lnott This is the code, of course there is no duplicate column name... ... so - is this a silly mistake (missing bracket or apostrophe = better use an editor instead of the web interface to develop) ... is it a crass error (young man, if you had read the manual on page n, you would know that field definitions whatever) ... or what ? And how would it be best to go about debugging this sort of error ? Thank you for any suggestions. Here follows the code: # Tabella 1 - dati personali dei medici db.define_table('Medici', Field('SiglaMedico','string',required=True,length=5,notnull=True,unique=True), Field('NomeCognome','string',length=5,required=True,notnull=True,unique=True), Field('Email'), Field('LNott','boolean',default=True), Field('LPref','boolean',default=True), Field('LFest','boolean',default=True), Field('OrarioSett','integer',default='38')) db.Medici.Email.requires=IS_EMAIL(error_message=T('Indirizzo email invalido!')) db.Medici.OrarioSett.requires=IS_INT_IN_RANGE(0,40) # Tabella 2 - periodi di assenza dei medici db.define_table('Assenze', Field('Medici_id',db.Medici), Field('Inizio','datetime'), Field('Fine','datetime'), Field('PesoMotivazione','integer'), Field('Motivazione','string')) db.Assenze.Inizio.requires=IS_DATETIME() db.Assenze.Fine.requires=IS_DATETIME() db.Assenze.PesoMotivazione.requires=IS_INT_IN_RANGE(0,10) # Tabella 3 - tipi di servizio db.define_table('Servizi', Field('SiglaServizio','string',length=5,required=True,notnull=True,unique=True), Field('TipoServizio','string')) # Tabella 4 - tipi di turno db.define_table('Turni', Field('SiglaTurno','string',length=5,required=True,notnull=True,unique=True), Field('OraInizio','time'), Field('OraFine','time'), Field('DescizioneTurno','string')) db.Turni.OraInizio.requires=IS_TIME() db.Turni.OraFine.requires=IS_TIME() # Tabella 5 - associamo i diversi tipi di turno a diversi tipi di servizio db.define_table('ServiziTurno', Field('Servizi_id',db.Servizi), Field('Turni_id',db.Turni)) # Tabella 6 - associamo ogni medico a diversi tipi di servizio db.define_table('ServiziMedici', Field('Servizi_id',db.Servizi), Field('Medici_id',db.Medici), Field('Preferenza','integer')) db.ServiziMedici.Preferenza.requires=IS_INT_IN_RANGE(0,10) # Tabella 7 - infine il nostro schema turni ! db.define_table('SchemaTurni', Field('Data','date'), Field('Turni_id',db.Turni), Field('Medici_id',db.Medici), Field('Gettone','boolean',default=False), Field('OreServizo','integer'), Field('Festivo','boolean'), Field('Preferenza','integer')) db.SchemaTurni.Data.requires=IS_DATE() db.SchemaTurni.OreServizio.requires=IS_INT_IN_RANGE(0,12) db.SchemaTurni.Preferenza.requires=IS_INT_IN_RANGE(0,10)