generic functions are used for this. Since "max" is a multiple-typed function you can use a helper class called ReturnTypeFromArgs:
from sqlalchemy.sql.functions import ReturnTypeFromArgs
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql import literal_column
from sqlalchemy.sql import func
from sqlalchemy.dialects import sqlite
class greatest(ReturnTypeFromArgs):
pass
@compiles(greatest, "sqlite")
def _render_max(elem, compiler, **kw):
return "max(%s)" % compiler.process(elem.clauses)
print(func.greatest(literal_column("foo")))
print(func.greatest(literal_column("foo")).compile(dialect=sqlite.dialect()))