Is there a way to get all the information returned as one row, with the
focus on a particular person? For example,
<Row {'pet': [{''name': 'Pet1'}, {''name':'Pet2'}], 'person': {'name':
'Bob', 'id': 1L}, 'thing': [{'name': 'thing1'}, {'name':'thing2'}]}>
... Or something similar? This would give me a single row that I can
iterate through his things or pets if I need to. For example, to print out
people's information:
for person in persons:
things = .....
pets = .......
print "%s %s" % (things, pets)
Right now the code I have is:
a = db( db.person.id==1).select(db.person.ALL, db.pet.ALL, db.thing.
ALL,
left=[db.pet.on(db.person.id==db.pet.person_id),
db.thing.on(db.person.id==db.thing.person_id)])
When I print this out, I get a combination of the same thing, which is a
mess:
<Row {'pet': {'person_id': 1L, 'id': 1L, 'name': 'Pet1'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 1L, 'name': 'thing1'}}>
<Row {'pet': {'person_id': 1L, 'id': 1L, 'name': 'Pet1'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 2L, 'name': 'thing2'}}>
<Row {'pet': {'person_id': 1L, 'id': 2L, 'name': 'Pet2'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 1L, 'name': 'thing1'}}>
<Row {'pet': {'person_id': 1L, 'id': 2L, 'name': 'Pet2'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 2L, 'name': 'thing2'}}>
<Row {'pet': {'person_id': 1L, 'id': 3L, 'name': 'pet3'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 1L, 'name': 'thing1'}}>
<Row {'pet': {'person_id': 1L, 'id': 3L, 'name': 'pet3'}, 'person': {'name':
'Bob', 'id': 1L}, 'thing': {'person_id': 1L, 'id': 2L, 'name': 'thing2'}}>
On Wednesday, January 22, 2014 4:40:31 PM UTC-5, Niphlod wrote:
>
> I'm guessing you had it wrong....
>
> db(main_table.filter == something).select(
> main_table, other_table,
> left=[other_table.on(main_table.some_id == other_table.reference),
> ....
> ]
> )
>
>
>
> On Wednesday, January 22, 2014 10:24:14 PM UTC+1, Apple Mason wrote:
>>
>>
>> I have the following tables:
>>
>>
>> db.define_table('person',
>> Field('name', 'string'))
>>
>> db.define_table('pet',
>> Field('name', 'string'),
>> Field('person_id', 'reference person'))
>>
>> db.define_table('thing',
>> Field('name', 'string'),
>> Field('person_id', 'reference person'))
>>
>> I have a person_id given to me, so I want all information about that
>> person (person's name, all pets, all things).
>>
>> I am trying left join, but I am not getting it quite right:
>>
>> person = db(db.person.id==person_id).select(db.person.ALL, db.pet.ALL,
>> db.thing.ALL,
>>
>> left=[db.person.on(db.person.id==db.pet.person_id),
>>
>> db.person.on(db.person.id==db.thing.person_id)])
>>
>> I get an error:
>>
>> OperationalError: ambiguous column name: person.id
>>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.