you're compiling the text() construct against the DefaultDialect, when  
it needs to be compiled against the PG dialect in order for the :num  
bind param to be converted to PG's desired format, %(num)s.    Also im  
not 100% sure if PG allows bind params for LIMIT, probably does though.

On Dec 11, 2008, at 5:33 AM, zepolen wrote:

>
> It seems compile()'ing a query results in the default bindparams not
> being used, is this a bug?
>
> Simple test case:
>
>>>> from sqlalchemy import *
>>>> engine = create_engine('postgres://uname:[EMAIL PROTECTED]/testdb')
>>>> query = text('select * from table limit :num',  
>>>> bindparams=[bindparam('num', value=50)])
>>>> engine.execute(query).rowcount
> 50
>>>> query = text('select * from table limit :num',  
>>>> bindparams=[bindparam('num', value=50)]).compile()
>>>> query.params
> {'num': 50}
>>>> engine.execute(query).rowcount
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 1174,
> in execute
>    return connection.execute(statement, *multiparams, **params)
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 806, in
> execute
>    return Connection.executors[c](self, object, multiparams, params)
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 865, in
> _execute_compiled
>    return self.__execute_context(context)
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 878, in
> __execute_context
>    self._cursor_execute(context.cursor, context.statement,
> context.parameters[0], context=context)
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 927, in
> _cursor_execute
>    self._handle_dbapi_exception(e, statement, parameters, cursor)
>  File "/home/zepolen/projects/test/ENV/lib/python2.5/site-packages/
> SQLAlchemy-0.5.0rc4-py2.5.egg/sqlalchemy/engine/base.py", line 909, in
> _handle_dbapi_exception
>    raise exc.DBAPIError.instance(statement, parameters, e,
> connection_invalidated=is_disconnect)
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) syntax error at or
> near ":"
> LINE 1: select * from table limit :num
>                                    ^
> 'select * from table limit :num' {'num': 50}
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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