On Wed, Apr 29, 2015 at 10:15 PM, Jonathan Vanasco
<jonat...@findmeon.com> wrote:
> I have a rather complex query that I've written in SQL
>
> • The result-set is 6 columns (1 = timestamp, 2-6 = fkeys on tables/objects)
> • The query involves 15 tables
> • The query is about 100 lines of raw SQL
> • The query is not fun, and apt to change
> • There are 2 placeholders/bind variables to be executed
>
> Eventually this will be a function or totally removed; it handles some
> newsfeed creation that would be better as a linked-list or publisher model.
>
> In any event, I don't want to rebuild this in SqlAlchemy.
>
> Are there any recommended ways to handle this within the ORM?
>
> I know I can just use session.execute with the bind variables...
>
> but i was wondering if there was a way to make some sort of object in the
> ORM that could execute the query , describe the columns/relationships, and
> generate an eagerload.  for lack of a better description, I'm guess I'm
> talking about a read-only ORM class that is backed by a select function
> instead of a table.
>
> There are dozens of hidden gems in SqlAlchemy that I learn about each day.
> I doubt there is anything like this, but I wouldn't be surprised if there
> were.
>

It looks like you can take a sqlalchemy.text() object and tell SA
about the column types, converting it into a proper selectable:

http://docs.sqlalchemy.org/en/rel_1_0/core/sqlelement.html#sqlalchemy.sql.expression.TextClause.columns

You might then be able to map a class to that selectable (I haven't
tried it though).

If it doesn't work, could you define a view in the database, and then
map a class to the view instead?

Simon

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to