If you have data from one table only, leave out the table name. (which is 
in your case)
If you have data from more than one table, you need to use the table name 
to access the correct info. 

This has always been the way web2py functions. :)

I think it is a matter of perspective. When you only access data from one 
table, it doesn't make sense to need to indicate the table name (more code, 
and unnecessary. Some of our table names can be rather complicated acronyms 
too.). When you retrieve from more than one table, to specifically access a 
particular field from a particular table, we need the table name. It is out 
of necessity rather than following some kind of structured rule.

Does that make sense?


On Friday, September 14, 2012 10:43:04 AM UTC+8, MichaelF wrote:
>
> The problem is that I need to change the problem line from:
> 246:    if attch.Addl_info_item.Email_text:
>
> to:
> 246:    if attch.Email_text:
>
> My previous 'select' statements retrieved fields from several tables, 
> while this one (the 'problem' one) retrieves from only one table. So, if I 
> understand correctly, if my fields come from only one table I leave off the 
> table name when 'addressing' the row, else I do use the table name. That 
> seems 'unorthogonal'. Am I misunderstanding?
>
> On Thursday, September 13, 2012 4:16:44 PM UTC-6, MichaelF wrote:
>>
>> I do a similar set of steps, yet one of the sets acts differently. I'm 
>> trying to loop through a query return (Rows), but I'm obviously missing 
>> something basic.
>>
>> I do a query and 'print' the return. Here's a snippet from my controller:
>>
>> line 144:
>> instAttch = db((db.Meet.id == request.args(1)) &
>>                (db.Addl_institution_info.Start_date < db.Meet.Start_date) 
>> &
>>                (db.Addl_institution_info.End_date > db.Meet.Start_date) &
>>                (db.Participant_team.Is_home_team)).select(
>>                  db.Addl_info_item.ALL,
>>                  join = [db.Participant_team.on(
>>                            db.Meet.id == db.Participant_team.Meet),
>>                          db.Team.on(db.Participant_team.Team == 
>> db.Team.id),
>>                          db.Institution.on(db.Team.Institution ==
>>                             db.Institution.id),
>>                          db.Addl_institution_info.on(
>>                             db.Addl_institution_info.Institution ==
>>                               db.Institution.id),
>>                          db.Addl_info_item.on(db.Addl_info_item.id ==
>>                            db.Addl_institution_info.Addl_info_item)])
>>
>> ...
>> Later in the same function (displayed with line numbers):
>> 240: print 'Start loop at 240; instAttch:\n'
>> 241: print instAttch
>> 242: for attch in instAttch:
>> 243:    print 'attch:\n'
>> 244:    #
>> 245:    print attch
>> 246:    if attch.Addl_info_item.Email_text:
>>
>> The output from line 241 looks like a Rows object to my rookie eye:
>>
>> Start loop at 240; instAttch:
>>
>>
>> Addl_info_item.id,Addl_info_item.File_path,Addl_info_item.Email_text,Addl_info_i
>> tem.Content_id,Addl_info_item.Internal_description
>> 2,C:\Users\mjf\Documents\MJF\WebSite\NCAA\private\Test DU Parking 
>> pass.dat,Test
>> email text: addl_info_item 2,,item 2
>>
>> attch:
>>
>> <Row {'Internal_description': 'item 2', 'Addl_pool_info': <gluon.dal.Set 
>> object
>> at 0x05DAA4D0>, 'update_record': <function <lambda> at 0x05F158B0>, 
>> 'Addl_instit
>> ution_info': <gluon.dal.Set object at 0x05DAA6B0>, 'File_path': 
>> 'C:\\Users\\mjf\
>> \Documents\\MJF\\WebSite\\NCAA\\private\\Test DU Parking pass.dat', 
>> 'Email_text'
>> : 'Test email text: addl_info_item 2', 'Content_id': '', 
>> 'Addl_meet_info': <gluo
>> n.dal.Set object at 0x05DAA1F0>, 'id': 2, 'delete_record': <function 
>> <lambda> at
>>  0x05F15F30>}>
>>
>> I do a 'for ...' on instAttch at line 242 and get:
>> <type 'exceptions.KeyError'> 'Addl_info_item'
>>
>> The traceback tells me it's at line 246:
>>    if attch.Addl_info_item.Email_text:
>>
>> What am I missing?
>>
>

-- 



Reply via email to