Hi M,

Is creating something in the database the only way to do it?  How would I 
coerce the view's return type into my object?  How do I substitute the view 
in the FROM part of my clause instead?


On Thursday, September 20, 2012 5:52:28 PM UTC+2, A.M. wrote:
>
>
> On Sep 20, 2012, at 11:49 AM, David McKeone wrote: 
>
> > I've googled around can't seem to find an answer to this, so hopefully 
> someone knows how to do it here. 
> > 
> > I'm using PostgreSQL and I have a PL/PGSQL function that filters and 
> modifies a particular table based on a number of conditions and then 
> returns a set of rows as the result.  This pattern has allowed the system 
> to use the functions as if they were tables so that joins can still be done 
> on the resulting values. 
> > 
> > So instead of: 
> > 
> > SELECT * FROM table1 INNER JOIN table2 ON table1.t2_id = table2.id 
> > 
> > I do: 
> > 
> > SELECT * FROM my_function( ...args... ) as table1 INNER JOIN table2 ON 
> table1.t2_id = table2.id 
> > 
> > That part works ok in plain SQL (and as well in the system I'm 
> converting from) 
> > 
> > So now with SQLAlchemy I have my declarative definitions for those 
> tables: 
> > 
> > class Table1(Base): 
> >    __tablename__ = 'table1' 
> > 
> >    id = Column() 
> >    t2_id = Column(ForeignKey()) 
> > 
> >    table2 = Relationship( ... )  # Join condition is specified 
> explicitly 
> > 
> > class Table2(Base); 
> >    __tablename__ = 'table2' 
> >   
> >    id = Column() 
> > 
> > and I'm trying to figure out how I would execute a query that looks like 
> this: 
> > 
> > result = 
> session.query(Table1).join(Table1.table2).options(contains_eager(Table1.table2))
>  
>
> > 
> > but using a function to 'fake' Table1 instead.  So basically I'm 
> attempting to get SQLAlchemy to treat the result of my function as if it 
> was the normal Table1 object.  I've tried using select_from() to inject my 
> call to func.my_function() but that doesn't seem to work and since what I'm 
> doing seems like it might be tricky (or not portable across SQL) I thought 
> I'd ask if it's even possible. 
> > 
> > Thanks for any help! 
> > 
>
> Perhaps the easiest way is to create a view: 
>
> CREATE VIEW table1 AS SELECT * FROM my_function(...); 
>
> Cheers, 
> M 
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sqlalchemy/-/4EQ3O5IWOX0J.
To post to this group, send email to sqlalchemy@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