On Jul 27, 2011, at 5:30 PM, Christoph Zwerschke wrote:
> Most databases allow ordinal numbers as expressions in order by clauses, some
> even in group by clauses. And in earlier versions of SQLAlchemy it had in
> fact been possible to express these as integers, e.g. query.order_by(1, 3,
> desc(2)).
>
> However, in version 0.7.1 this yields an "SQL expression object or string
> expected" error. To make use of this feature you now need to write
> query.order_by('1', '3', desc('2')) which is not so readable and convenient
> as the above. Has this been changed by intent?
Well of course its going through the literal_as_text() function which ensures
what's given can be rendered as SQL. The function was sloppier in 0.6 and we
had user confusion when clearly non-complaint objects were passed through to
various places (such as and_(("a", ), ("b",)), etc.). order_by() is
accepting SQL expressions, not values, so it is consistent that values should
be coerced to SQL first in this case literal_column("1"), etc.
If you want uber-readable, I'd do this:
def ordinal(n):
return literal_column(str(n))
ordinal(1), ordinal(2).desc(), etc.
I'm not actually understanding what "ORDER BY 1" is getting you here in any
case or how this relates to AJAX.
> I know, using ordinals has some drawbacks and may be considered a bad habit,
> but they can still be useful in some situations. E.g. it makes it possible to
> decorate arbitrary queries of the same structure for use in an autosuggest
> AJAX controller with an "order_by(1)".
>
> -- Christoph
>
> --
> 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.