class ImplicitForeignKeyConstraint(ForeignKeyConstraint): def __init__(self, columns, refcolumns, primary_key=None, **kwargs): super(ImplicitForeignKeyConstraint, self).__init__( columns, refcolumns, **kwargs) self.primary_key_flag = primary_key def _set_parent(self, table): referenced_table = table.metadata.tables[ self.elements[0].target_fullname.split('.')[0]] for column in self.columns: new_column = getattr(referenced_table.c, column).copy() if self.primary_key_flag is not None: new_column.primary_key = self.primary_key_flag table.append_column(new_column) super(ImplicitForeignKeyConstraint, self)._set_parent(table)