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)