Hola Drayco, aun no entiendo como funciona la aplicacion, el codigo que soporta bases de datos pre-existentes para mysql simplemente no existe en el archivo sql.py en la version 1.83.2, ni en dal.py en trunk.
Deben existir las definiciones para mysql de 'reference FK' (llave foranea) y 'reference TFK' (llave tabla foranea) como se observa por ejemplo en las definiciones para MS-SQL, among other things. In English: ----------- I still don't understand how the app can work, the code that supports legacy DBs for mysql is simply not there in the sql.py file on version 1.83.2, and neither in trunk's dal.py. 'reference FK' (foreign key) and 'reference TFK' (table foreign key) must be defined for mysql, similar to those defined for MS-SQL for example, among other things. Denes. On Jan 31, 9:13 pm, drayco <[email protected]> wrote: > Hi DenesL, This old application works now with with web2py 1.83.2 and > mysql in RedHat 5.5 with 64 bits > > However, with web2py in trunk and mysql it doesn't works > > De hecho en esta liga, te agradecí que sin querer me solucionaste un > problema :D > > http://groups.google.com/group/web2py/browse_thread/thread/789387057d... > > Es una aplicación que tiene 2 bases de datos legadas y una tercera en > la cual se tienen los datos con los cuales se pueden generar ligas > entre las 2 bases legadas y dar los servicios web que informan a otras > aplicaciones el contenido de las 2 legadas. Suena raro pero eso > necesitan en la escuela en la que trabajo en México. > > Gracias de antemano > > On Jan 28, 4:15 pm, DenesL <[email protected]> wrote: > > > Are you sure it worked before? > > As far as I know mysql is not supported for legacy DBs using > > primarykey. > > > On Jan 28, 5:04 pm, drayco <[email protected]> wrote: > > > > Hi, I updated my trunk version > > > > However, The same issue is still > > > > This is the new 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/iscada/models/cfedb.py", line > > > 16, in <module> > > > migrate = False) > > > File "/home/drayco/web2py/gluon/dal.py", line 3471, in define_table > > > sequence_name=sequence_name)) > > > File "/home/drayco/web2py/gluon/dal.py", line 3755, in __init__ > > > "primarykey must be a list of fields from table '%s " % tablename > > > SyntaxError: primarykey must be a list of fields from table > > > 'med_dnpmst_4 > > > > SnapShot > > > > <type 'exceptions.SyntaxError'>(primarykey must be a list of fields > > > from table 'med_dnpmst_4 ) > > > > File /home/drayco/web2py/gluon/dal.py in __init__ at line 3755 > > > > Function argument list > > > > (self=<Table {'indice': <gluon.dal.Field object at 0x2...ractual': > > > <gluon.dal.Field object at 0x25b25d0>}>, db=<DAL {'_lastsql': "SET > > > sql_mode='NO_BACKSLASH_ES...tables': [], '_migrate': True, > > > '_pool_size': 10}>, tablename='med_dnpmst_4', > > > *fields=[<gluon.dal.Field object>, <gluon.dal.Field object>, > > > <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field > > > object>, <gluon.dal.Field object>, <gluon.dal.Field object>], > > > **args={'primarykey': ['DireccionUTR', 'Indice'], 'sequence_name': > > > None, 'trigger_name': None}) > > > > Code listing > > > > 3750. > > > 3751. > > > 3752. > > > 3753. > > > 3754. > > > 3755. > > > > 3756. > > > 3757. > > > 3758. > > > 3759. > > > > if hasattr(self,'_primarykey'): > > > for k in self._primarykey: > > > if k not in self.fields: > > > raise SyntaxError, \ > > > "primarykey must be a list of fields from table '%s " % tablename > > > > else: > > > self[k].notnull = True > > > > On Jan 28, 8:35 am, Massimo Di Pierro <[email protected]> > > > wrote: > > > > > this should now be fixed in trunk > > > > > On Jan 8, 2:58 pm, Thadeus Burgess <[email protected]> wrote: > > > > > > 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, > > ... > > read more »

