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.