On Aug 10, 2010, at 11:20 PM, botz wrote:

> oops, didn't mean to submit that quite yet.  crazy dog...
> 
> anyways, given that I have foo_props() which acts as  a kind of from-
> clause
> as in
> select * from foo_props( 123);
> 
> I'd like to use that in relationship to a Foo class
> 
> i.e.
> mapper( Foo, foo_table, properties( props = relationship( FooProps ) )
> 
> but of course I can't do a join between Foo and foo_props on foo_id
> since foo_props takes it as a parameter.
> 
> I can do a
> query( FooPropsType ).from_statement( "select  * from foo_props( %d )"
> % foo_id )
> but I'm not sure how to set that up as a relationship or
> column_property.
> 
> Any hints would be greatly appreciated.

so the prerequisites for relationship() are:

        - the target is a mapped class
        - there's some way to "join" from parent to child

easy enough, the prerequisites for mapped class are:

        - there's a "selectable", meaning it has named columns and can be 
SELECTed from
        - the "selectable" has one or more columns that define a primary key, 
either naturally or artificially

so with a custom function you'd start with the example at 
http://www.sqlalchemy.org/docs/sqlexpression.html#functions , its maybe 5 slots 
down where you use column(), select(), and from_obj to set up a selectable.

then you map to it, with mapper() (or declarative.__table__ if you're going 
that route).  The mapper() will require the "primary_key" argument, such as 
primary_key=[myselectable.c.foo].

since your selectable also has no "foreign keys" as part of its metadata, the 
relationship() needs to have that too plus a join condition:

relationship(FooProps, primaryjoin=foo_table.c.x==selectable.c.y, 
foreign_keys=[selectable.c.y])

and thats it



> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to