On 7/19/15 11:44 AM, Eli Collins wrote:
Unfortunately for me, my actual application's text() clause is a larger, more complex bit of sql. I know it's not ideal, but is there a way to wrap the existing TextClause without having to build the whole expression programmatically? E.g. wrap/coerce the TextClause into a ColumnElement; or some constructor that inherits from ColumnElement but accepts arbitrary sql like text()?
Just keep to column elements, like literal_column("whatever"), which each correspond to an individual column expression, and you should be fine.





On Saturday, July 18, 2015 at 9:00:11 PM UTC-4, Michael Bayer wrote:



    On 7/18/15 12:35 PM, Eli Collins wrote:
    Hi All -

    I'm currently trying to use sql.union() to construct a union of
    sql.select() instances.  My problem is that one of the columns in
    one of the selects is an expression that takes a bind parameter,
    which is causing an error.

    I initially tried to code things as follows ...

    |
    fromsqlalchemy.sql import*

    s1 =select([text("(:value || c3) as c1").bindparams(value='foo'),
                 column("c2")],from_obj=table("t1"))
    s2 =select([column("c1"),column("c2")],from_obj=table("t2"))

    u1 =union(s1,s2)

    |

    ... however, union() throws/'Argument Error: All selectables
    passed to CompoundSelect must have identical numbers of columns'./

    Tracking this down, the problem seems to be that the first column
    of s1 is a text() object, which doesn't get counted as a column
    when union() tries to compare the column counts of the two
    select() clauses.

    I've tried using literal_column(), but it doesn't support passing
    in a text() element as it's value, nor does it have a
    bindparams() method.

    use (bindparam("value", String)  + column("c2")).label("c1")



    I've run out of ideas for how to provide something "column-like"
    for union(), while at the same time safely use bindparams() to
    pass in a value.

    I'm not sure if this is a bug, or if there's another construction
    I should be using.

    - Eli Collins

    (P.S. I'm using SQLAlchemy 1.0.6; Python 2.7)


-- 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+...@googlegroups.com <javascript:>.
    To post to this group, send email to sqlal...@googlegroups.com
    <javascript:>.
    Visit this group at http://groups.google.com/group/sqlalchemy.
    For more options, visit https://groups.google.com/d/optout.

--
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 <mailto:sqlalchemy+unsubscr...@googlegroups.com>. To post to this group, send email to sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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