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
>>>>>>>>
>>>>>>>>

-- 



Reply via email to