Prev: Is it possible to store data in a Python file in a way similar to Ruby's __END__ section?
Next: Incorrect scope of list comprehension variables
From: mrdrew on 2 Apr 2010 20:26 Hey all, Right now I'm completely unable to pass parameters to queries under any circumstances. I've got a fairly trivial query as a test... c.execute('SELECT * FROM %(table_name)s LIMIT 1', {'table_name':"mytable"}) It fails, giving the error message... Traceback (most recent call last): File "test.py", line 7, in <module> c.execute('SELECT * FROM %(table_name)s LIMIT 1', {'table_name':"mytable"}) psycopg2.ProgrammingError: syntax error at or near "E'mytable'" LINE 1: SELECT * FROM E'mytable' LIMIT 1 This may be similar to the problem that ASh had (http:// groups.google.com/group/comp.lang.python/browse_thread/thread/ 7463ded0971425f8/538e60ba0ccf2ad3?#538e60ba0ccf2ad3) I'd really appreciate any ideas. At the moment, I'm stuck concatenating strings and hoping for the best.
From: mrdrew on 5 Apr 2010 12:20
Thanks for the replies. The param style is pyformat. I've tried using the '%s' style with a set and get exactly the same error. c.execute('SELECT * FROM %s LIMIT 1',('mytable',)) psycopg2.ProgrammingError: syntax error at or near "E'mytable'" LINE 1: SELECT * FROM E'mytable' LIMIT 1 MRAB and Steve Holden may be correct, but are at odds with the psycopg2 documentation (http://initd.org/psycopg/docs/ usage.html#passing-parameters-to-sql-queries) which shows named arguments being used with a dictionary. It appears that the real problem is, as Steve mentioned, that the device driver may not allow table name substitution. The following query seems to work... c.execute('SELECT * FROM mytable WHERE id = %(id)s',{'id':'10'}) (Oddly enough, this one doesn't) c.execute('SELECT * FROM mytable WHERE id = %(id)d',{'id':int(10)}) TypeError: int argument required |