The problem is this: You defined Field('sexoWorked')
but you are using "sexoworked" in your code. Some versions of web2py were forgiving about that but it resulted in a problem because SQL is not always case agnostic. You need to make sure you use the same case in the table definitions and in the code. Attention: if you change the case in models that may trigger a migration and data loss unless you convert the .table files. I will be happy to do that for you if needed. Massimo On Mar 31, 1:03 pm, drayco <antrod...@gmail.com> wrote: > Good morning to all, our case is as follows, in the production site > have web2py 1.89.5 and MySQL, all our applications are operating > properly. > > Now we would like to upgrade to version 1.94.6, however we have > compatibility issues with the new version of the dal, these are the > details. > > db.define_table('benefs2', > Field('names', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Benef. Nombre(s)'), > Field('apelPater', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Benef. Apel. Pater.'), > Field('apelMater', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Benef. Apel. Mater.'), > Field('rfc', 'string', requires=[IS_UPPER(), > IS_NOT_EMPTY(error_message='No puede estar vacio'),\ > IS_LENGTH(13,error_message='El tamaño debe ser de 13 > caracteres alfanumericos'),IS_ALPHANUMERIC(error_message='¡Deben ser > caracteres alfanumericos!'), \ > IS_NOT_IN_DB(db,'benefs2.rfc',error_message='El RFC ya > existe')], label='Benef. RFC'), > > Field('sexo','string',requires=IS_IN_SET(['femenino','masculino']), > label='Benef. Sexo'), > > Field('enfermedades',db.enfermedades,requires=IS_IN_DB(db,'enfermedades.id' > ,'% > (names)s'), label='Benef. Enfermedad',readable=False), > Field('namesWorked', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Trabajador Nombre(s)'), > Field('apelPaterWorked', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Trabajador Apel.Pater.'), > Field('apelMaterWorked', 'string', > requires=[IS_UPPER(),IS_NOT_EMPTY(error_message='No puede estar > vacio')], label='Trabajador Apel.Mater.'), > Field('rfcWorked', 'string', requires=[IS_UPPER(), > IS_NOT_EMPTY(error_message='No puede estar vacio'),\ > IS_LENGTH(13,error_message='El tamaño debe ser de 13 > caracteres alfanumericos'),IS_ALPHANUMERIC(error_message='¡Deben ser > caracteres alfanumericos!'), \ > IS_NOT_IN_DB(db,'benefs2.rfcWorked',error_message='El RFC ya > existe')], label='Trabajador RFC'), > IS_FLOAT_IN_RANGE(0,1e1000,error_message='Debe ser Numero positivo')], > label='Trabajador Tel.Trabajo'), > > Field('sexoWorked','string',requires=IS_IN_SET(['femenino','masculino']), > label='Trabajador Sexo'), > Field('subdireccion','string',requires=IS_IN_SET(['Nezahualcóyotl > y Chalco','Ecatepec y Tecámac','Cuautitlán Izcalli y > Naucalpan']),label='Trabajador SubDir.')) > > Could you help?, thanks in advance for your excellent work. > > Traceback (most recent call last): > File "/home/drayco/web2py/gluon/restricted.py", line 189, in > restricted > exec ccode in environment > File "/home/drayco/web2py/applications/init/models/db.py", line 334, > in <module> > Field('subdireccion','string',requires=IS_IN_SET(['Nezahualcóyotl > y Chalco','Ecatepec y Tecámac','Cuautitlán Izcalli y > Naucalpan']),label='Trabajador SubDir.')) > File "/home/drayco/web2py/gluon/dal.py", line 3973, in define_table > polymodel=polymodel) > File "/home/drayco/web2py/gluon/dal.py", line 611, in create_table > fake_migrate=fake_migrate) > File "/home/drayco/web2py/gluon/dal.py", line 655, in migrate_table > and not isinstance(table[key].type, SQLCustomType) \ > File "/home/drayco/web2py/gluon/dal.py", line 4323, in __getitem__ > return dict.__getitem__(self, str(key)) > KeyError: 'sexoworked' > > Code listing > > 4318. > 4319. > 4320. > 4321. > 4322. > 4323. > > 4324. > 4325. > 4326. > 4327. > return rows[0] > return None > elif str(key).isdigit(): > return self._db(self.id == > key).select(limitby=(0,1)).first() > elif key: > return dict.__getitem__(self, str(key)) > > def __call__(self, key=DEFAULT, **kwargs): > if key!=DEFAULT: > if isinstance(key, Query):