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