from sqlalchemy import * from sqlalchemy.sql import _Grouping db = create_engine('sqlite://') md = BoundMetaData(db.engine) foo = Table('foo',md,Column('id',Integer,primary_key=True)) foo.create() for i in range(1,20): foo.insert().execute(id=i) md.engine.echo=True print list(except_( select([foo.c.id], foo.c.id.op('%')(2) == 0), _Grouping(except_( select([foo.c.id], foo.c.id.op('%')(3) == 0), select([foo.c.id], foo.c.id.op('%')(4) == 0) ))).execute()) # Expecting 2, 4, 8, 10, 12, 14, 16 - not 2, 10, 14