Skip to main content

cognee.datasets

Static class for managing datasets and their data. Methods that target a specific dataset identify it by UUID, 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()

Returns all datasets accessible to the resolved user.

datasets.discover_datasets()

Discover dataset names from a local directory layout.

datasets.list_data()

Returns all 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()

Check whether a dataset contains any data.

datasets.get_status()

Get pipeline status for one or more datasets. When 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.
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
If you already hold a string id (for example one read back from the HTTP API), wrap it in UUID before calling:

datasets.empty_dataset()

Delete all data in a dataset and remove the dataset itself.
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()

Delete a specific data item from a dataset.
mode="hard" is preserved for backward compatibility, but the implementation explicitly warns not to use it.
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=True and the removed item was the last one.
See Delete for the same flow in narrative form, and forget() for a scope matrix across all deletion modes.
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:
Relationships that existed only in the old version disappear with the deleted nodes; relationships found in the new content are created by the cognify step. 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()

Delete all datasets the user has permission to delete.

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 on Dataset.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

Use get_status() in a wait loop to confirm all datasets in a parallel batch have finished indexing before querying.
The same pattern works when indexing is triggered via the HTTP API — poll get_status() from a separate process until all datasets reach DATASET_PROCESSING_COMPLETED or DATASET_PROCESSING_ERRORED.
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.