cognee.datasets
Static class for managing datasets and their data. Methods that target a specific dataset identify it byUUID, never by name — see dataset name vs dataset id for how the two relate and which identifier each operation accepts.
For lower-level helpers such as get_dataset(), get_datasets_by_name(), and create_authorized_dataset(), see Dataset helper methods below.
Methods
datasets.list_datasets()
datasets.discover_datasets()
datasets.list_data()
Data records in a dataset.
This is the API to use when you want to read back DataItem fields stored during cognee.add(), such as label and external_metadata.
datasets.has_data()
datasets.get_status()
pipeline_names is omitted, this method keeps the legacy flat shape and returns the status of cognify_pipeline only.
With no
pipeline_names or a single pipeline name, the method returns {str(dataset_id): PipelineRunStatus}.
With multiple pipeline names, it returns {str(dataset_id): {pipeline_name: PipelineRunStatus}}.
Possible values:
Datasets with no recorded run for the requested pipeline are absent from the result.
Troubleshooting UUID errors
Troubleshooting UUID errors
get_status() expects dataset_ids to be a list of dataset UUIDs, not dataset names or string ids. Internally the values are bound against the pipeline_runs.dataset_id UUID column, so passing a plain string raises a SQLAlchemy StatementError wrapping one of:AttributeError: 'str' object has no attribute 'hex'ValueError: badly formed hexadecimal UUID string
UUID before calling:datasets.empty_dataset()
Notes
Notes
Despite the name,
empty_dataset() does not leave an empty dataset record behind. It deletes graph content, data records, and the dataset entity itself.datasets.delete_data()
Notes
Notes
What delete_data() removes across stores
What delete_data() removes across stores
delete_data() is not a relational-only operation. It cleans up every backend that holds memory derived from the targeted data item:Session cleanup is best-effort: a cache failure is logged as a warning and never fails
delete_data(), so a {"status": "success"} result does not guarantee every entry was removed. It is also the fine-grained variant — empty_dataset() deletes every session attributed to the dataset outright, and forget(everything=True) prunes the cache wholesale.What is intentionally left behind:- Shared nodes. An entity such as
"New York"that another data item also references stays in the graph and vector store; only nodes unique to the deleted item are dropped. Relationships between surviving shared nodes are not deleted either. - The dataset. The dataset record survives unless you pass
delete_dataset_if_empty=Trueand the removed item was the last one.
forget() for a scope matrix across all deletion modes.Cascading changes when a source document changes
Cascading changes when a source document changes
delete_data() only removes; it never re-extracts. To propagate an edit to a source document through the graph and vector stores, use update(), which calls delete_data() for the old item, re-adds the new content, and re-runs cognify on the dataset:incremental_loading=True (the default) keeps the other, unchanged documents in the dataset from being reprocessed — pass incremental_loading=False only when the whole dataset should be rebuilt, for example after changing your graph model or prompts.To clear a document’s derived memory while keeping its record and raw file, use forget(..., memory_only=True) and re-run cognify.datasets.delete_all()
Dataset helper methods
cognee.datasets covers the common cases. Underneath it, Cognee exports a set of dataset helpers importable from cognee.modules.data.methods. Use them when you need to resolve a dataset by name or id, create one explicitly, or apply a permission type other than read. All of them are async except check_dataset_name().
Fetching datasets
Ownership-scoped lookups (they match onDataset.owner_id only, ignoring ACLs):
Permission-aware lookups (they take a
User object and go through the permissions system, so they also return datasets shared with the user):
permission_type is one of read, write, delete, or share.
Creating and deleting datasets
Because a
Data row belongs to exactly one dataset, delete_dataset() also deletes that dataset’s Data rows. Each removal goes through the same raw-file rule as delete_data(): the file on disk is only removed when no other Data row still points at that raw_data_location and it lives under DATA_ROOT_DIRECTORY. Use datasets.empty_dataset() when you want to clear a dataset’s data but keep the dataset itself.Examples
Basic dataset operations
Basic dataset operations
Poll for indexing completion across parallel datasets
Poll for indexing completion across parallel datasets
Use The same pattern works when indexing is triggered via the HTTP API — poll
get_status() in a wait loop to confirm all datasets in a parallel batch have finished indexing before querying.get_status() from a separate process until all datasets reach DATASET_PROCESSING_COMPLETED or DATASET_PROCESSING_ERRORED.Read back DataItem metadata
Read back DataItem metadata
external_metadata is stored on the relational Data record only. It is not placed into the vector store or knowledge graph and is not returned by cognee.search(). If you need metadata to be vector-searchable, define a custom DataPoint subclass and list the fields to embed in metadata.index_fields. See DataPoints.