I use the following pattern in my REST APIs, building up the select, joins, 
where conditions, group bys, order bys, depending on the query parameters 
passed in by the user:

    selects = [Foo]
    joins = [(Bar, Foo.c.id == Bar.c.foo_id)]
    where_conditions = [Foo.c.id == request.args['pk']]

    if request.args.get('include_baz'):
        selects.append(Baz)
        joins.append((Baz, Bar.c.id == Baz.c.bar_id))

What I would like to do is the following:

    sel = select(
        *selects
    ).join(
        *joins  # doesn't work
    ).where(
        *where_conditions
    )

This works for everything except for `join` and `outerjoin`. So I have to 
write it like this:

    sel = select(*selects)
    for table, condition in joins:
        sel = sel.join(table, condition)
    sel = se.where(*where_conditions)

Is there some way to perform a join by passing an array of (table, 
conditions) so I can write the SQL without all of the `sel = sel. ` noise?

What I've been doing is using a function like the following:

    def collection_query(selects, joins, where_conditions, ...)

But this has other problems and I would like to go back to raw sqlalchemy.

Thanks and best regards,

Matthew

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/84058464-5b92-4305-a348-d5a65fba441fn%40googlegroups.com.

Reply via email to