you have to escape those out with %%.
On Jan 18, 2012, at 3:06 AM, lestat wrote:
> Hi!
>
>
> If I create DDL like this with %:
>
> event.listen(db.metadata, 'after_create', DDL(
> """
> CREATE OR REPLACE FUNCTION test_func() RETURNS void AS $$
> DECLARE
> max_user_id INTEGER;
> BEGIN
> SELECT INTO max_user_id MAX("id") FROM "user";
> RAISE INFO 'max_user_id: (%)', max_user_id;
> END;
> $$ LANGUAGE plpgsql;
>
> """
> ))
>
>
> and in python shell call db.create_all() for create tables I got
> exception:
>
>
>
> ----> 1 db.create_all()
>
> /usr/lib/python2.7/site-packages/flaskext/sqlalchemy.pyc in
> create_all(self, bind, app)
> 793 Parameters were added
> 794 """
> --> 795 self._execute_for_all_tables(app, bind, 'create_all')
> 796
> 797 def drop_all(self, bind='__all__', app=None):
>
> /usr/lib/python2.7/site-packages/flaskext/sqlalchemy.pyc in
> _execute_for_all_tables(self, app, bind, operation)
> 785 tables = self.get_tables_for_bind(bind)
> 786 op = getattr(self.Model.metadata, operation)
> --> 787 op(bind=self.get_engine(app, bind), tables=tables)
> 788
> 789 def create_all(self, bind='__all__', app=None):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/schema.pyc in
> create_all(self, bind, tables, checkfirst)
> 2513 self,
> 2514 checkfirst=checkfirst,
> -> 2515 tables=tables)
> 2516
> 2517 def drop_all(self, bind=None, tables=None,
> checkfirst=True):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> _run_visitor(self, visitorcallable, element, connection, **kwargs)
> 2232 conn = connection
> 2233 try:
> -> 2234 conn._run_visitor(visitorcallable, element,
> **kwargs)
> 2235 finally:
> 2236 if connection is None:
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> _run_visitor(self, visitorcallable, element, **kwargs)
> 1902 def _run_visitor(self, visitorcallable, element,
> **kwargs):
> 1903 visitorcallable(self.dialect, self,
> -> 1904 **kwargs).traverse_single(element)
> 1905
> 1906
>
> /usr/lib/python2.7/site-packages/sqlalchemy/sql/visitors.pyc in
> traverse_single(self, obj, **kw)
> 84 meth = getattr(v, "visit_%s" % obj.__visit_name__,
> None)
> 85 if meth:
> ---> 86 return meth(obj, **kw)
> 87
> 88 def iterate(self, obj):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/ddl.pyc in
> visit_metadata(self, metadata)
> 70 tables=collection,
> 71
> checkfirst=self.checkfirst,
> ---> 72 _ddl_runner=self)
> 73
> 74 def visit_table(self, table, create_ok=False):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/event.pyc in
> __call__(self, *args, **kw)
> 272 fn(*args, **kw)
> 273 for fn in self.listeners:
> --> 274 fn(*args, **kw)
> 275
> 276 # I'm not entirely thrilled about the overhead here,
>
>
> /usr/lib/python2.7/site-packages/sqlalchemy/schema.pyc in
> __call__(self, target, bind, **kw)
> 2823
> 2824 if self._should_execute(target, bind, **kw):
> -> 2825 return bind.execute(self.against(target))
> 2826
> 2827 def _check_ddl_on(self, on):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> execute(self, object, *multiparams, **params)
> 1403 object,
> 1404 multiparams,
> -> 1405 params)
> 1406 else:
> 1407 raise exc.InvalidRequestError(
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> _execute_ddl(self, ddl, multiparams, params)
> 1488 dialect = self.dialect
> 1489
> -> 1490 compiled = ddl.compile(dialect=dialect)
> 1491 ret = self._execute_context(
> 1492 dialect,
>
> /usr/lib/python2.7/site-packages/sqlalchemy/sql/expression.pyc in
> compile(self, bind, dialect, **kw)
> 1720 else:
> 1721 dialect = default.DefaultDialect()
> -> 1722 return self._compiler(dialect, bind=bind, **kw)
> 1723
> 1724 def _compiler(self, dialect, **kw):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/schema.pyc in
> _compiler(self, dialect, **kw)
> 2850 Dialect."""
> 2851
> -> 2852 return dialect.ddl_compiler(dialect, self, **kw)
> 2853
> 2854 class DDL(DDLElement):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> __init__(self, dialect, statement, bind)
> 697 self.statement = statement
> 698 self.can_execute = statement.supports_execution
> --> 699 self.string = self.process(self.statement)
> 700
> 701 @util.deprecated("0.7", ":class:`.Compiled` objects now
> compile "
>
> /usr/lib/python2.7/site-packages/sqlalchemy/engine/base.pyc in
> process(self, obj, **kwargs)
> 716
> 717 def process(self, obj, **kwargs):
> --> 718 return obj._compiler_dispatch(self, **kwargs)
> 719
> 720 def __str__(self):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/sql/visitors.pyc in
> _compiler_dispatch(self, visitor, **kw)
> 57 getter = operator.attrgetter("visit_%s" %
> visit_name)
> 58 def _compiler_dispatch(self, visitor, **kw):
> ---> 59 return getter(visitor)(self, **kw)
> 60 else:
> 61 def _compiler_dispatch(self, visitor, **kw):
>
> /usr/lib/python2.7/site-packages/sqlalchemy/sql/compiler.pyc in
> visit_ddl(self, ddl, **kwargs)
> 1345 context.setdefault('fullname',
> preparer.format_table(ddl.target))
> 1346
> -> 1347 return
> self.sql_compiler.post_process_text(ddl.statement % context)
> 1348
> 1349 def visit_create_schema(self, create):
>
> ValueError: unsupported format character ')' (0x29) at index 192
>
>
> How I can fix this?
>
> Thanks!
>
> --
> 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.
>
--
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.