Yes, it makes sense, and I've already modified my code; thanks. It's the 
inconsistency that gets me. It's not a big deal, but still. If I add 
another field from another table to my select, then I have to change all my 
field references to include the table references. I suspect the Rows/Row 
iterator/accessor is already doing something, and if so it could allow the 
unnecessary table references.

Anyway, not a big deal; I'm glad my code is working. Thanks again.

On Friday, September 14, 2012 2:11:57 AM UTC-6, lyn2py wrote:
>
> 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