All I know is that tables are issued as lowercase, but you can still access
your table as an uppercase attribute.

There is an inconsistency in the DAL somewhere because of this... Somewhere
it is forgetting to convert to lower case. I don't know why converting table
names to lower case is forced in web2py and I disagree with it.

for example:

db = DAL()
db.define_table('TableA', Field('Superman'))
# CREATE TABLE tablea WITH FIELDS superman
db(db.TableA.Superman == "clark").select().first().Superman
# SELECT * FROM tablea WHERE superman="clark"


--
Thadeus




On Sat, Jan 8, 2011 at 1:17 AM, mart <[email protected]> wrote:

> really? I didn't know, thanks for pointing that out...
>
> just out of curiosity....
>
> in
>
> in __getitem__
>    return dict.__getitem__(self, str(key))
> KeyError: 'tecnogradua'
>
> don't the attribute lookups get done by python ultimately?  Just
> trying to understand...
> how could this have worked if doing x.__getitem__ ? Even if dal does a
> string.lower() or something, once the table is named and created,
> would something (outside of migrate) not catch that error and set off
> the alarm even before any change need to happen?
>
> Thanks,
> Mart :)
>
>
> On Jan 8, 1:44 am, Thadeus Burgess <[email protected]> wrote:
> > I can also confirm this is a bug with the new DAL.
> >
> > It is only caused when using upper case characters in the table or field
> > names. It seems that web2py converts all of the tablenames to lower case
> > when issuing the SQL (so your actual tables are lower regardless of what
> you
> > specify in the python). There is something in the migrations that cause
> this
> > to come up, because it will work just fine one run and crash on another
> run
> > after changing some unrelated tables.
> >
> > I don't think the DAL should force the tables to lowercase.
> >
> > --
> > Thadeus
> >
> >
> >
> >
> >
> >
> >
> > On Sat, Jan 8, 2011 at 12:38 AM, mart <[email protected]> wrote:
> > > no, this is python...
> >
> > > not sure how it could have worked before, but the key (technogradua)
> > > in .keys() is not being picked up... dal is simply pointing that out
> > > with the exception being thrown. I did notice when I made the switch
> > > that a few more of my mistakes got picked up (or it could be that I
> > > forgot that I changed something), but regardless... since switching to
> > > the latest DAL release and fixing my mistakes that it quickly picked
> > > up, I have had no problems (except those that I cause). I would simply
> > > take those exceptions for cash, change the case and enjoy one less
> > > exception ;)
> >
> > > Mart :)
> >
> > > On Jan 8, 1:19 am, drayco <[email protected]> wrote:
> > > > Ok, I understand your point.
> >
> > > > But this is a issue of DAL or what?
> >
> > > > because I only update web2py to trunk version
> >
> > > > On Jan 8, 12:15 am, mart <[email protected]> wrote:
> >
> > > > > Probably just being unhappy with the case :)
> >
> > > > > tecnoGradua != tecnogradua
> >
> > > > > Mart :)
> >
> > > > > Field("tecnoGradua", 'string',
> >
> > > > > On Jan 8, 12:57 am, drayco <[email protected]> wrote:
> >
> > > > > > Hi, this code works with web2py 1.89.5 with mysql
> >
> > > > > > but with web2py in trunk and mysql it dosent works.
> >
> > > > > > db.define_table("lentes",
> > > > > >     audit,
> > > > > >     Field("tecnoGradua", 'string',
> > > > > >
> requires=IS_IN_SET(['MONOFOCAL','BIFOCAL','MULTIFOCAL']),label="Num.
> > > > > > de Graduaciones"),
> > > > > >     Field("material", "string", requires=IS_IN_SET(['MICA
> > > CR-39','ORMA
> > > > > > 1.50','HIGH INDEX','THIN & LITE 1.67
> > > > > > ASFÉRICA','POLICARBONATO','CRISTAL'])),
> > > > > >     Field("tipo", "string",requires=IS_NULL_OR(IS_IN_SET(['FLAT
> > > > > > TOP','BLEND O YOUNGER','PROGRESIVOS','PROGRESIVOS VARILUX COMFORT
> > > > > > NE','PROGRESIVOS COMPACTOS','PROGRESIVOS VARILUX COMFORT
> SHORT']))),
> > > > > >     Field("tecnoVisual",
> >
> > >
> 'string',requires=IS_NULL_OR(IS_IN_SET(['PHOTOGRAY','TRANSITIONS'])),label=
> > > "Tecnologia
> > > > > > de Visualización"),
> > > > > >     Field("tratamiento",
> "string",requires=IS_NULL_OR(IS_IN_SET(['CON
> > > > > > ANTIRREFLEJANTE','ESPEJEADO','CRIZAL FORTE','CRIZAL ALIZÉ']))),
> > > > > >     Field('limitup','double', writable=False, readable=False),
> > > > > >     Field('limitdown','double', writable=False, readable=False),
> > > > > >     Field("promo", "double",
> requires=[IS_NOT_EMPTY(error_message='No
> > > > > > puede estar vacio'),IS_FLOAT_IN_RANGE(0,10000,error_message='Debe
> ser
> > > > > > un numero positivo entre 0 y 10000')], label='Precio de
> Promoción'),
> > > > > >     Field("precio", "double", writable=False, readable=False),
> > > > > >     Field("costo", "double", writable=False, readable=False),
> > > > > >     Field("observaciones","text", writable=False,
> readable=False))
> >
> > > > > > This is the traceback
> >
> > > > > > Traceback (most recent call last):
> > > > > >   File "/home/drayco/web2py/gluon/restricted.py", line 188, in
> > > > > > restricted
> > > > > >     exec ccode in environment
> > > > > >   File "/home/drayco/web2py/applications/movil/models/db.py",
> line
> > > > > > 272, in <module>
> > > > > >     Field("observaciones","text", writable=False,
> readable=False))
> > > > > >   File "/home/drayco/web2py/gluon/dal.py", line 3441, in
> define_table
> > > > > >     polymodel=polymodel)
> > > > > >   File "/home/drayco/web2py/gluon/dal.py", line 551, in
> create_table
> > > > > >     fake_migrate=fake_migrate)
> > > > > >   File "/home/drayco/web2py/gluon/dal.py", line 595, in
> migrate_table
> > > > > >     and not isinstance(table[key].type, SQLCustomType) \
> > > > > >   File "/home/drayco/web2py/gluon/dal.py", line 3778, in
> __getitem__
> > > > > >     return dict.__getitem__(self, str(key))
> > > > > > KeyError: 'tecnogradua'
> >
> > > > > > Can I need to change something?
>

Reply via email to