try escaping your percent signs: %%. otherwise they appear to
psycopg2 like bind parameters. The exception is raised by psycopg2.
On Dec 30, 2008, at 4:33 PM, Faheem Mitha wrote:
>
>
> Hi,
>
> The following function (bugfn) gives errors when I try to execute it
> with
> postgresql using sqlalchemy.sql's text function. I thought the
> problem was
> with using double quotes (") and/or single quotes (') inside the
> string,
> but no, it seems to be perfectly happy with sex_sub for example.
>
> Executing bugfn directly in psql works fine, so it is not a postgres
> problem.
>
> Traceback follows. If I need to submit an issue, let me know. Please
> cc me
> on any reply.
>
> Regards, Faheem
> Mitha.
>
> ***************************************************************************
> Traceback (most recent call last):
> File "dbsession.py", line 260, in <module>
> make_tables(dbstring)
> File "dbsession.py", line 146, in make_tables
> conn.execute(create_bug_function)
> File "/var/lib/python-support/python2.5/sqlalchemy/engine/
> base.py", line
> 806, in execute
> return Connection.executors[c](self, object, multiparams, params)
> File "/var/lib/python-support/python2.5/sqlalchemy/engine/
> base.py", line
> 856, in execute_clauseelement
> return self.__execute_context(context)
> File "/var/lib/python-support/python2.5/sqlalchemy/engine/
> base.py", line
> 878, in __execute_context
> self._cursor_execute(context.cursor, context.statement,
> context.parameters[0], context=context)
> File "/var/lib/python-support/python2.5/sqlalchemy/engine/
> base.py", line
> 925, in _cursor_execute
> self.dialect.do_execute(cursor, statement, parameters,
> context=context)
> File "/var/lib/python-support/python2.5/sqlalchemy/engine/
> default.py",
> line 122, in do_execute
> cursor.execute(statement, parameters)
> TypeError: 'dict' object is unindexable
> ************************************************************************
>
> from sqlalchemy.sql import text
>
> create_plpython = text("""
> CREATE LANGUAGE plpythonu;
> """)
>
> create_bug_function = text("""
> CREATE OR REPLACE FUNCTION bugfn (sex text)
> RETURNS integer
> AS $$
> if sex == 'F':
> return 2
> else:
> raise RuntimeError, "%s is wrong"%(sex)
> $$ LANGUAGE plpythonu;
> """)
>
> create_sex_sub_function = text("""
> CREATE OR REPLACE FUNCTION sex_sub (sex text)
> RETURNS integer
> AS $$
> if sex == 'M':
> return 1
> if sex == 'F':
> return 2
> else:
> raise RuntimeError, "sex must be either 'M' or 'F' but is '"
> + sex + "'."
> $$ LANGUAGE plpythonu;
> """)
>
> [...]
> db = create_engine("postgres://btsnp:foo...@localhost:5432/
> btsnp_test")
> conn = db.connect()
> conn.execute(create_plpython)
> conn.execute(create_sex_sub_function)
> conn.execute(create_bug_function)
> conn.close()
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---