_literal_as_text probably should reject tuples, lists, dicts

Issue #1847 resolved
Mike Bayer repo owner created an issue

since these indicate usage errors:

from sqlalchemy import *
from sqlalchemy.sql import table, column
from sqlalchemy.sql.expression import _literal_as_text

t1= table('t1', column('a'))

print type(_literal_as_text((t1, t1.c.a)))

Comments (3)

  1. Mike Bayer reporter
    • changed milestone to 0.7.0

    Just make it accept only strings. Probably want to push to 0.7 in case someone has a stringlike object they are sending in.

    diff -r 3d9ca1b7d658f7af04c27e85227e6b92d0e9eb5d lib/sqlalchemy/sql/expression.py
    --- a/lib/sqlalchemy/sql/expression.py  Wed Oct 20 17:58:35 2010 -0400
    +++ b/lib/sqlalchemy/sql/expression.py  Wed Oct 20 18:04:49 2010 -0400
    @@ -989,8 +989,10 @@
     def _literal_as_text(element):
         if hasattr(element, '__clause_element__'):
             return element.__clause_element__()
    +    elif isinstance(element, basestring):
    +        return _TextClause(unicode(element))
         elif not isinstance(element, Visitable):
    -        return _TextClause(unicode(element))
    +        raise exc.ArgumentError("SQL expression object or string expected.")
         else:
             return element
    
  2. Log in to comment