Converting to 2.x fixed the problems. On Wednesday, September 19, 2012 12:04:28 PM UTC-6, MichaelF wrote: > > I have come across one bug with this. If I add a record using the admin > interface, I check the 'Is_home_team' checkbox (Is_home_team is defined as > a boolean, of course), yet the record has 0 for that field. Given that, as > you might expect then, all records have a 0 for that field. > > ?? > > On Monday, September 17, 2012 9:53:34 PM UTC-6, MichaelF wrote: >> >> Well, that's unfortunate. I've migrated this semi-manually; I had only >> four 'boolean' fields. >> >> Other than that, the suggested fix ( >> db._adapter.types['boolean']='TINYINT(1)' ) seems to work. >> >> On Monday, September 17, 2012 8:42:24 PM UTC-6, Massimo Di Pierro wrote: >>> >>> I cannot reproduce this error with your code in 2.0.9 and the lines in >>> your traceback do not correspond to the source code I have. I think you may >>> be using an older dal.py >>> >>> On Monday, 17 September 2012 16:43:30 UTC-5, MichaelF wrote: >>>> >>>> Yes; here it is: >>>> >>>> 1. >>>> 2. >>>> 3. >>>> 4. >>>> 5. >>>> 6. >>>> 7. >>>> 8. >>>> 9. >>>> >>>> Traceback (most recent call last): >>>> File "gluon/restricted.py", line 205, in restricted >>>> File "C:/Program Files >>>> (x86)/web2py/applications/NCAA_schedule/models/db.py" >>>> <http://127.0.0.1:8000/admin/default/edit/NCAA_schedule/models/db.py>, >>>> line 165, in <module> >>>> File "gluon/dal.py", line 6320, in define_table >>>> File "gluon/dal.py", line 742, in create_table >>>> File "gluon/dal.py", line 797, in migrate_table >>>> File "gluon/dal.py", line 6714, in __getitem__ >>>> KeyError: 'length_is_yards' >>>> >>>> The table definition follows: >>>> >>>> db.define_table('Pool', >>>> Field('Pool_name', 'string', required=True, >>>> unique=True), >>>> Field('Address1', 'string', length=60), >>>> Field('Address2', 'string', length=60), >>>> Field('City', 'string', length=60), >>>> Field('State', 'string', length=2), >>>> Field('Zip', 'string', length=15), >>>> Field('Nr_lanes', 'integer', required=True), >>>> Field('Length', 'integer', required=True), >>>> Field('Length_is_yards', 'boolean', >>>> required=True,default=True), >>>> Field('Has_moveable_bulkhead', 'boolean', required=True, >>>> default=False), >>>> format='%(Pool_name)s %(Nr_lanes)s') >>>> >>>> Line 165 is the last line of the statement (format=...). >>>> >>>> On Monday, September 17, 2012 3:15:08 PM UTC-6, Massimo Di Pierro wrote: >>>>> >>>>> Do you have a traceback with more information? >>>>> >>>>> On Monday, 17 September 2012 14:23:56 UTC-5, MichaelF wrote: >>>>>> >>>>>> Thanks. However, I refer to that field with upper case in all places. >>>>>> Can you tell me where the lower case 'pending' comes from? The field >>>>>> name >>>>>> has always been defined as upper case, and the app has been working up >>>>>> until I made that latest change. So I went into the db and changed the >>>>>> field name to start with lower case, then changed the model file to make >>>>>> it >>>>>> lower-case 'pending'. That worked, but now the next boolean field in the >>>>>> db.py file has an upper-case/lower-case problem. The field is >>>>>> "Length_is_yards" in both the db.py file and the db, and has been that >>>>>> way >>>>>> for weeks, and we've been through several db migrations for the past >>>>>> several weeks (not sure about on those particular tables, though). Now I >>>>>> get the KeyError as shown above, but this time it's for field >>>>>> 'length_is_yards'. It looks to me that web2py is assuming it's lower >>>>>> case. >>>>>> >>>>>> One of my migrations last week was the "fake_migrate_all=True" type; >>>>>> don't know if that's relevant. >>>>>> >>>>>> Also, in the .database file the field name is Length_is_yards >>>>>> (leading "L" is capital), as is the field name in the MySQL db. >>>>>> >>>>>> I'm confused. >>>>>> >>>>>> Michael >>>>>> >>>>>> On Monday, September 17, 2012 12:51:34 PM UTC-6, Massimo Di Pierro >>>>>> wrote: >>>>>>> >>>>>>> Field('Pending' <<< upper case >>>>>>> ... >>>>>>> <type 'exceptions.KeyError'> 'pending' <<< lower case >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Monday, 17 September 2012 11:37:13 UTC-5, MichaelF wrote: >>>>>>>> >>>>>>>> I did a simple import of 'copy' and that got me by that first >>>>>>>> problem. But now I have the following problem: >>>>>>>> >>>>>>>> db.define_table('Person_certification', >>>>>>>> Field('Person', db.Person), >>>>>>>> ... >>>>>>>> Field('Pending', 'boolean', default = False), >>>>>>>> ... >>>>>>>> >>>>>>>> I get the following error on the line that defines field 'Pending' >>>>>>>> (and this is the first 'boolean' type in the file): >>>>>>>> <type 'exceptions.KeyError'> 'pending'I have not changed the >>>>>>>> underlying MySQL db yet; all the booleans are still char(1). Do I need >>>>>>>> to >>>>>>>> change them first to Tinyint(1)? I tried that; same error. >>>>>>>> >>>>>>>> Thanks. >>>>>>>> >>>>>>>> On Monday, September 17, 2012 9:21:37 AM UTC-6, MichaelF wrote: >>>>>>>>> >>>>>>>>> 1. What will I need to import to get it to recognize 'copy'? I run >>>>>>>>> the suggested code and get told that 'copy' does not exist. (I'm >>>>>>>>> running >>>>>>>>> 2.5; what do I conditionally import?) >>>>>>>>> >>>>>>>>> 2. Are we doing a copy because all the adapters share the same >>>>>>>>> 'types' object? >>>>>>>>> >>>>>>>>> On Tuesday, August 7, 2012 3:48:35 PM UTC-6, Massimo Di Pierro >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On can always do: >>>>>>>>>> >>>>>>>>>> db=DAL('mssql://...') >>>>>>>>>> db._adapter.types = copy.copy(db._adapter.types) >>>>>>>>>> db._adapter.types['boolean']='TINYINT(1)' >>>>>>>>>> >>>>>>>>>> It should work. Can you please check it? >>>>>>>>>> >>>>>>>>>> On Tuesday, 7 August 2012 11:56:59 UTC-5, Osman Masood wrote: >>>>>>>>>>> >>>>>>>>>>> However, web2py maintains the promise of backwards >>>>>>>>>>> compatibility. One way is to have a 'tinyint_boolean' datatype for >>>>>>>>>>> those >>>>>>>>>>> who want to use tinyints as booleans. But that looks kind of messy >>>>>>>>>>> and >>>>>>>>>>> inelegant. >>>>>>>>>>> >>>>>>>>>>> An alternative is this: We could add a migration script to >>>>>>>>>>> /scripts to convert all boolean data types from CHAR(1) to >>>>>>>>>>> TINYINT(1), and >>>>>>>>>>> from 'T' to 1 and 'F' to 0. Also, when a table model is called in >>>>>>>>>>> define_table(), it would check whether its boolean data types are >>>>>>>>>>> CHAR or >>>>>>>>>>> INT, and save the result somewhere (so it wouldn't have to keep >>>>>>>>>>> checking.) >>>>>>>>>>> If the server is restarted, it would once again perform this check. >>>>>>>>>>> So, a >>>>>>>>>>> user would run the migration script and simply restart the server. >>>>>>>>>>> >>>>>>>>>>> On Thursday, July 12, 2012 9:18:33 PM UTC+8, simon wrote: >>>>>>>>>>>> >>>>>>>>>>>> I have just come across this exact same issue. >>>>>>>>>>>> >>>>>>>>>>>> The web2py adapter converts boolean to char(1) but in MySQL the >>>>>>>>>>>> specification is that boolean is stored as tinyint with 0 and 1. >>>>>>>>>>>> So web2py >>>>>>>>>>>> adapter is incorrect. Not changing it perpetuates the mistake. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Sunday, 6 March 2011 05:14:49 UTC, Kevin Ivarsen wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> I'm connecting to a legacy MySQL database (migrate=False) with >>>>>>>>>>>>> a lot >>>>>>>>>>>>> of fields declared BOOLEAN, and noticed that attempts to >>>>>>>>>>>>> modify these >>>>>>>>>>>>> fields with the DAL failed. The DAL issues a query like this: >>>>>>>>>>>>> >>>>>>>>>>>>> UPDATE sometable SET someflag='T' WHERE ... >>>>>>>>>>>>> >>>>>>>>>>>>> but this gets rejected by MySQL. >>>>>>>>>>>>> >>>>>>>>>>>>> Reading through dal.py, I see that the "boolean" type maps to >>>>>>>>>>>>> CHAR(1) >>>>>>>>>>>>> in MySQLAdapter, and represent() converts to "T" and "F" >>>>>>>>>>>>> values. >>>>>>>>>>>>> However, the BOOLEAN type is a synonym for TINYINT(1) in >>>>>>>>>>>>> MySQL, with >>>>>>>>>>>>> values 0 or 1, according to: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html >>>>>>>>>>>>> >>>>>>>>>>>>> I can trivially change this behavior in dal.py for my >>>>>>>>>>>>> purposes, but it >>>>>>>>>>>>> would be interested to try to incorporate this into the main >>>>>>>>>>>>> web2py >>>>>>>>>>>>> distribution. Unfortunately, the trivial change will break >>>>>>>>>>>>> backwards >>>>>>>>>>>>> compatibility for people who are already depending on the >>>>>>>>>>>>> current >>>>>>>>>>>>> behavior. Any thoughts on how this could be done in a >>>>>>>>>>>>> backwards- >>>>>>>>>>>>> compatible way, or is it too much of an edge case to worry >>>>>>>>>>>>> about? >>>>>>>>>>>>> >>>>>>>>>>>>> Cheers, >>>>>>>>>>>>> Kevin >>>>>>>>>>>> >>>>>>>>>>>>
--

