My guess is that this is a problem with sqlite. You had the field, you
removed it (but sqlite does not support drop), then you put it back
(and web2py tried to define it again).
Delete everything in applications/<yourapp>/databases then run it
again.
You have a typo
db.define_table('SchemaTurni',
...
Field('OreServizo','integer'), <<<<
On Aug 21, 5:01 pm, Michele Alzetta <[email protected]> wrote:
> 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)