I notice that you use pg8000, you may also try with psycopg2 instead... Richard
On Wed, Nov 18, 2015 at 11:34 AM, Richard Vézina < [email protected]> wrote: > I didn't know about the placeholder argument, though the documentation > says that it may not works for all the backend, is your database support it? > > Documentation : > In this case, the return values are not parsed or transformed by the DAL, > and the format depends on the specific database driver. This usage with > selects is normally not needed, but it is more common with indexes. > executesql takes four optional arguments: placeholders, as_dict, fields > andcolnames. placeholders is an optional sequence of values to be > substituted in or, if supported by the DB driver, a dictionary with keys > matching named placeholders in your SQL. > > > > On Wed, Nov 18, 2015 at 6:46 AM, Pierre <[email protected]> wrote: > >> Hi everyone, >> >> I cannot run an executesql command with the placeholders argument. Is >> there a robust example somewhere to use as a reference ? >> I need to pass string and float variables via placeholders >> >> I use a postgresql database >> >> test code is >> >> def test(): >> tablename = 'tablex' >> query = 'select * from %s' >> result = db.executesql(query,placeholders=(tablename,)) >> return locals() >> >> and the traceback: >> >> <class 'gluon.contrib.pg8000.ProgrammingError'> ('ERROR', '42601', >> 'syntax error at or near "$1"') Version web2py™ Version >> 2.12.3-stable+timestamp.2015.08.19.00.18.03 Traceback >> >> 1. >> 2. >> 3. >> 4. >> 5. >> 6. >> 7. >> 8. >> 9. >> 10. >> 11. >> 12. >> 13. >> 14. >> 15. >> 16. >> 17. >> 18. >> 19. >> 20. >> 21. >> 22. >> 23. >> 24. >> >> Traceback (most recent call last): >> File "/opt/web2py/gluon/restricted.py", line 227, in restricted >> exec ccode in environment >> File "/opt/web2py/applications/proxima/controllers/default.py" >> <http://127.0.0.1:8000/admin/default/edit/proxima/controllers/default.py>, >> line 89, in <module> >> File "/opt/web2py/gluon/globals.py", line 412, in <lambda> >> self._caller = lambda f: f() >> File "/opt/web2py/applications/proxima/controllers/default.py" >> <http://127.0.0.1:8000/admin/default/edit/proxima/controllers/default.py>, >> line 41, in test >> result = db.executesql(query,placeholders=(tablename,)) >> File "/opt/web2py/gluon/packages/dal/pydal/base.py", line 998, in >> executesql >> adapter.execute(query, placeholders) >> File "/opt/web2py/gluon/packages/dal/pydal/adapters/postgres.py", line >> 360, in execute >> return BaseAdapter.execute(self, *a, **b) >> File "/opt/web2py/gluon/packages/dal/pydal/adapters/base.py", line 1378, >> in execute >> return self.log_execute(*a, **b) >> File "/opt/web2py/gluon/packages/dal/pydal/adapters/base.py", line 1372, >> in log_execute >> ret = self.cursor.execute(command, *a[1:], **b) >> File "/opt/web2py/gluon/contrib/pg8000/core.py", line 573, in execute >> self._c.execute(self, operation, args) >> File "/opt/web2py/gluon/contrib/pg8000/core.py", line 1626, in execute >> self.handle_messages(cursor) >> File "/opt/web2py/gluon/contrib/pg8000/core.py", line 1774, in >> handle_messages >> raise self.error >> ProgrammingError: ('ERROR', '42601', 'syntax error at or near "$1"') >> >> >> >> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> You received this message because you are subscribed to the Google Groups >> "web2py-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

