'Create a *proxy* for this column.
This is a copy of this ``Column`` referenced by a different parent
(such as an alias or select statement).  The column should
be used only in select scenarios, as its full DDL/default
information is not transferred.'

def _make_proxy(self, selectable, name=None, key=None, name_is_truncatable=False, **kw):

    fk = [ForeignKey(f.column, _constraint=f.constraint) for f in self.foreign_keys]
    if ((name is None) and (self.name is None)):
        raise exc.InvalidRequestError("Cannot    initialize    a    sub-selectable    with    this    Column    object    until    it's    'name'    has    been    assigned.")
    try:
        c = self._constructor((_as_truncated((name or self.name)) if name_is_truncatable else (name or self.name)), self.type, key=(key if key else (name if name else self.key)), primary_key=self.primary_key, nullable=self.nullable, _proxies=[self], *fk)
    except TypeError:
        util.raise_from_cause(TypeError(('Could    not    create    a    copy    of    this    %r    object.        Ensure    the    class    includes    a    _constructor()    attribute    or    method    which    accepts    the    standard    Column    constructor    arguments,    or    references    the    Column    class    itself.' % self.__class__)))
    c.table = selectable
    selectable._columns.add(c)
    if (selectable._is_clone_of is not None):
        c._is_clone_of = selectable._is_clone_of.columns[c.key]
    if self.primary_key:
        selectable.primary_key.add(c)
    c.dispatch.after_parent_attach(c, selectable)
    return c
