Thomas Drake wrote:
>
> Wow, my above example sucked. Here's something close to what I'm
> actually using:
>
> qs = ...
> qunion = qs[0].union_all(*qs[1:]).subquery()
>
> joined = session.query( KnownComponents.name,
> qunion,
> func.group_concat(qunion.c.status.op('order
> by')(qunion.c.stop))
> ). \
> join(qunion).filter
> (KnownComponents.id==qunion.c.known_components_id)
> joined = joined.group_by( KnownComponents.name,
> KnownComponents.version,
> qunion.c.serial,
> qunion.c.dependent_version,
> qunion.c.compile_type )
> rows = joined.all()
op() is old school. make a custom expression element:
from sqlalchemy.ext import compiler
from sqlalchemy.sql import ColumnElement
class group_concat(ColumnElement):
def __init__(self, col1, col2):
self.col1 = col1
self.col2 = col2
self.type = col1.type
@compiler.compiles(group_concat, 'mysql')
def compile_group_concat(element, compiler, **kw):
return "GROUP CONCAT(%s ORDER BY %s)" % (
compiler.process(element.col1),
compiler.process(element.col2)
)
from sqlalchemy import *
m = MetaData()
t = Table('t1', m, Column('foo', String), Column('bar', String))
print select([group_concat(t.c.foo,
t.c.bar)]).compile(bind=create_engine('mysql://'))
"SELECT GROUP CONCAT(t1.foo ORDER BY t1.bar) AS anon_1"
> >
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---