def __init__(self, columns, refcolumns, name=None, onupdate=None,
                 ondelete=None, deferrable=None, initially=None,
                 use_alter=False, link_to_name=False, match=None,
                 table=None, **dialect_kw):
        super(ForeignKeyConstraint, self).\
            __init__(name, deferrable, initially, **dialect_kw)

        self.onupdate = onupdate
        self.ondelete = ondelete
        self.link_to_name = link_to_name
        if self.name is None and use_alter:
            raise exc.ArgumentError("Alterable Constraint requires a name")
        self.use_alter = use_alter
        self.match = match

        self._elements = util.OrderedDict()

        # standalone ForeignKeyConstraint - create
        # associated ForeignKey objects which will be applied to hosted
        # Column objects (in col.foreign_keys), either now or when attached
        # to the Table for string-specified names
        for col, refcol in zip(columns, refcolumns):
            self._elements[col] = ForeignKey(
                refcol,
                _constraint=self,
                name=self.name,
                onupdate=self.onupdate,
                ondelete=self.ondelete,
                use_alter=self.use_alter,
                link_to_name=self.link_to_name,
                match=self.match,
                deferrable=self.deferrable,
                initially=self.initially,
                **self.dialect_kwargs
            )

        if table is not None:
            self._set_parent_with_dispatch(table)
        elif columns and \
            isinstance(columns[0], Column) and \
                columns[0].table is not None:
            self._set_parent_with_dispatch(columns[0].table)
Construct a composite-capable FOREIGN KEY.
dataset/ETHPy150Open RoseOu/flasky/venv/lib/python2.7/site-packages/sqlalchemy/sql/schema.py/ForeignKeyConstraint.__init__