The execute() method of Connection and Engine passes through parameters 
unchanged to cursor.execute() or cursor.executemany(), depending on their 
structure, if you pass the method a plain SQL string followed by the parameters:

        connection.execute("SELECT * FROM table WHERE id=? AND foo=?",  25, 
'bar')

The usage of "?" is dependent on the accepted paramstyles of the underlying 
DBAPI.    A DBAPI may accept "qmark" (?), "format" (%s),  "numeric" (:1, :2, 
:3), or no positional style at all.   You'd need to consult its documentation 
for details.

When using Session, acquire the current connection using conn = 
Session.connection().


On Dec 20, 2010, at 8:10 AM, neurino wrote:

> How can I execute a query like if I'm using the normal python DB API,
> passing params as a sequence and not as a mapping?
> 
> Something like:
> 
> myParams = (1, 1, 2, 51, 3, 101, 4, 151, 6, 201, 7, 251)
> 
> Session.execute("""
>    SELECT T.datetime, MAX(T.v0), MAX(T.v1), MAX(T.v2), MAX(T.v3),
> MAX(T.v4), MAX(T.v5) FROM (
> 
>        SELECT data.value AS v0, NULL AS v1, NULL AS v2, NULL AS v3,
> NULL AS v4, NULL AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq
>            WHERE acquisitions.id_centr=? and dati.id_mis=?
> 
>        UNION
> 
>        SELECT NULL AS v0, data.value AS v1, NULL AS v2, NULL AS v3,
> NULL AS v4, NULL AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq
>            WHERE acquisitions.id_centr=? and dati.id_mis=?
> 
>        UNION
> 
>            SELECT NULL AS v0, NULL AS v1, data.value AS v2, NULL AS
> v3, NULL AS v4, NULL AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq WHERE
> acquisitions.id_centr=? and dati.id_mis=?
> 
>        UNION
> 
>            SELECT NULL AS v0, NULL AS v1, NULL AS v2, data.value AS
> v3, NULL AS v4, NULL AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq
>        WHERE acquisitions.id_centr=? and dati.id_mis=?
> 
>        UNION
> 
>        SELECT NULL AS v0, NULL AS v1, NULL AS v2, NULL AS v3,
> data.value AS v4, NULL AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq
>            WHERE acquisitions.id_centr=? and dati.id_mis=?
> 
>        UNION
> 
>        SELECT NULL AS v0, NULL AS v1, NULL AS v2, NULL AS v3, NULL AS
> v4, data.value AS v5
>            FROM acquisitions INNER JOIN data
>            ON acquisitions.id = data.id_acq
>            WHERE acquisitions.id_centr=? and dati.id_mis=?
> 
>    ) AS T GROUP BY T.datetime""",
> 
>    myParams
> 
> )
> 
> Of course the number of UNIONs is not fixed and is built on lenght of
> given tuple.
> 
> I searched around for it but I see Session.execute just accept bind
> params as a mapping.
> 
> Thank you for your support
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to