# Datasets
The Datasets class from the mapbox.services.datasets module provides access to the Mapbox Datasets API. You can also import it directly from the mapbox module.
```python >>> from mapbox import Datasets
See https://www.mapbox.com/api-documentation/maps/#datasets for general documentation of the API.
Your Mapbox access token should be set in your environment; see the [access
tokens](access_tokens.md) documentation for more information. To use the
Datasets API, you must use a token created with datasets:*
scopes. See
https://www.mapbox.com/account/apps/.
## Upload methods
The methods of the Datasets class that provide access to the Datasets API generally take dataset id and feature id arguments and return an instance of [requests.Response](http://docs.python-requests.org/en/latest/api/#requests.Response).
## Usage
Create a new dataset using the Dataset class, giving it a name and description. The id of the created dataset is in JSON data of the response.
```python >>> datasets = Datasets() >>> create_resp = datasets.create( … name=’example’, description=’An example dataset’) >>> new = create_resp.json() >>> new[‘name’] ‘example’ >>> new[‘description’] ‘An example dataset’ >>> new_id = new[‘id’]
You can find it in your account’s list of datasets.
```python >>> listing_resp = datasets.list() >>> [ds[‘id’] for ds in listing_resp.json()] […]
Instead of scanning the list for attributes of the dataset, you can read them directly by dataset id.
```python >>> attrs = datasets.read_dataset(new_id).json() >>> attrs[‘id’] == new_id True >>> attrs[‘name’] ‘example’ >>> attrs[‘description’] ‘An example dataset’
If you want to change a dataset’s name or description, you can.
```python >>> attrs = datasets.update_dataset( … new_id, name=’updated example’, description=’An updated example dataset’ … ).json() >>> # attrs = datasets.read_dataset(new_id).json() >>> attrs[‘id’] == new_id True >>> attrs[‘name’] ‘updated example’ >>> attrs[‘description’] ‘An updated example dataset’
You can delete the dataset and it will no longer be present in your listing.
```python >>> resp = datasets.delete_dataset(new_id) >>> resp.status_code 204 >>> listing_resp = datasets.list() >>> [ds[‘id’] for ds in listing_resp.json()] […]
## Dataset features
The main point of a dataset is store a collection of GeoJSON features. Let us create a new dataset and then add a GeoJSON feature to it.
```python >>> resp = datasets.create( … name=’features-example’, description=’An example dataset with features’) >>> new_id = resp.json()[‘id’] >>> feature = { … ‘type’: ‘Feature’, ‘id’: ‘1’, ‘properties’: {‘name’: ‘Insula Nulla’}, … ‘geometry’: {‘type’: ‘Point’, ‘coordinates’: [0, 0]}} >>> resp = datasets.update_feature(new_id, ‘1’, feature) >>> resp.status_code 200
In the feature collection of the dataset you will see this feature.
```python >>> collection = datasets.list_features(new_id).json() >>> len(collection[‘features’]) 1 >>> first = collection[‘features’][0] >>> first[‘id’] ‘1’ >>> first[‘properties’][‘name’] ‘Insula Nulla’
## Individual feature access
You can also read, update, and delete features individually.
### Read
The read_feature() method has the semantics of HTTP GET.
```python >>> resp = datasets.read_feature(new_id, ‘1’) >>> resp.status_code 200 >>> feature = resp.json() >>> feature[‘id’] ‘1’ >>> feature[‘properties’][‘name’] ‘Insula Nulla’
### Update
The update_feature() method has the semantics of HTTP PUT. If there is no feature in the dataset with the given id, a new feature will be created.
```python >>> update = { … ‘type’: ‘Feature’, ‘id’: ‘1’, ‘properties’: {‘name’: ‘Insula Nulla C’}, … ‘geometry’: {‘type’: ‘Point’, ‘coordinates’: [0, 0]}} >>> update = datasets.update_feature(new_id, ‘1’, update).json() >>> update[‘id’] ‘1’ >>> update[‘properties’][‘name’] ‘Insula Nulla C’
### Delete
The delete_feature() method has the semantics of HTTP DELETE.
```python >>> resp = datasets.delete_feature(new_id, ‘1’) >>> resp.status_code 204
Finally, let’s clean up the features example dataset.
```python >>> resp = datasets.delete_dataset(new_id) >>> resp.status_code 204 >>> listing_resp = datasets.list() >>> [ds[‘id’] for ds in listing_resp.json()] […]