you can make a function act like a table by creating a select() out of it, check out the fifth example at http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#functions
On Sep 20, 2012, at 1:09 PM, David McKeone wrote: > 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. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. 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.