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!



-- 
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/-/bYCl5PH0yNIJ.
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