from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import ColumnElement, _clause_element_as_expr
class rollup(ColumnElement):
def __init__(self, element):
self.element = _clause_element_as_expr(element)
@compiles(rollup, "mysql")
def _mysql_rollup(element, compiler, **kw):
return "%s WITH ROLLUP" % (compiler.process(element.element, **kw))
from sqlalchemy.orm import Session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer
Base = declarative_base()
class Foo(Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)
data = Column(Integer)
s = Session()
from sqlalchemy.dialects import mysql
print s.query(Foo).group_by(rollup(Foo.data)).statement.compile(dialect=mysql.dialect())
print s.query(Foo).group_by(rollup(Foo.__table__.c.data)).statement.compile(dialect=mysql.dialect())