On Sun, Dec 28, 2008 at 9:29 AM, Michael Bayer <[email protected]> wrote:
> you'd put
> "primaryjoin=crate_table.c.crate_id==crates2apples.c.some_column"
> inside of the relation(). This approach usually makes the
> eagerload's job easier, as far as constructing a join from crate_table
> to Apple.
>
> Of course the only way to know the best approach is to know exactly
> what data you need to be loading. Its often the case that the best
> approach overall is to use just a plain Crate->Apple relation with
> nothing special, then just use a simple in-python property to give you
> a particular "view" of that collection. If you're dealing with small
> numbers of records that's how I'd usually do something like this. I
> think the docs try to make a similar point on this.
Several thousand records, sadly. I will probably be able to get away
with the in-python property for
most cases, but this is the ugly one.
So, I gave that a shot and I must have messed up somewhere.
crates2apples = \
select([ crate_table.c.id.label("crate_id"),
apple_table,
],
from_obj = crate_table.\
<bunch of joins>.outerjoin(apple_table, <condition>))
crates2apples_a = crates2apples.alias('_crates2apples')
mapper(Apple, crates2apples_a, non_primary=True)
mapper(Crate, crate_table, properties={
'apples': relation(Apple, lazy=True, uselist=True, viewonly=True,
primaryjoin= crate_table.c.id ==
crates2apples_a.c.crate_id,
),
})
is the basic setup. I'm using the alias because there was a warning
about needing to make an alias otherwise.
Under this setup, I get the following error:
ArgumentError: Could not determine relation direction for primaryjoin
condition 'crate_table.id = _crates2apples.pool_id', on relation
Crate.apples (Apple). Specify the foreign_keys argument to indicate
which columns on the relation are foreign.
If I specify foreign_keys = [ crates2apples_a.c.crate_id, ], I get...
ArgumentError: Can't determine relation direction for relationship
'Crate.apples (Apple)' - foreign key columns are present in neither
the parent nor the child's mapped tables.
If I specify foreign_keys = [ crate_table.c.id ], I get...
ArgumentError: Remote column '_crates2apples.crate_id' is not part of
mapping Mapper|Crate|crate_table. Specify remote_side argument to
indicate which column lazy join condition should bind.
Which is about what I'd expect.
I'm sure I'm going wrong somewhere. Enlightenment would help. :-)
Thanks a bunch for taking the time,
Alan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---