How to delete records?

Records can be deleted with record.delete(), which will permanently remove them from your database.

When it comes to records of Artifact and Collection, they are “moved into trash” when you first call record.delete().

  • Trashed records are invisible in the UI and excluded from the query results, see visibility faq.

  • If a record is already in the trash or permanent=True is passed, calling record.delete() triggers permanent delete.

# !pip install lamindb
!lamin init --storage test-delete
 initialized lamindb: testuser1/test-delete
import lamindb as ln
import pandas as pd
 connected lamindb: testuser1/test-delete
artifact = ln.Artifact.from_df(
    pd.DataFrame({"a": [1, 2], "b": [3, 4]}), description="mydf"
)
artifact.save()
! no run & transform got linked, call `ln.track()` & re-run
Artifact(uid='aNGaJdaYZdBNx0mS0000', is_latest=True, description='mydf', suffix='.parquet', kind='dataset', otype='DataFrame', size=2054, hash='HesrmwkODFQaQpPQYsXffg', space_id=1, storage_id=1, created_by_id=1, created_at=2025-01-12 14:03:00 UTC)
ln.Artifact.df()
uid key description suffix kind otype size hash n_files n_observations _hash_type _key_is_virtual _curator _overwrite_versions space_id storage_id version is_latest run_id created_at created_by_id aux _branch_code
id
1 aNGaJdaYZdBNx0mS0000 None mydf .parquet dataset DataFrame 2054 HesrmwkODFQaQpPQYsXffg None None md5 True None False 1 1 None True None 2025-01-12 14:03:00.502408+00:00 1 None 1

Trash an artifact

artifact.delete()
 moved artifact to trash (_branch_code = -1)

No longer visible:

ln.Artifact.df()
uid id key description suffix kind otype size hash n_files n_observations _hash_type _key_is_virtual _curator _overwrite_versions space_id storage_id version is_latest run_id created_at created_by_id aux _branch_code

But the artifact still exists in the database and in storage, you can find it by passing None to the visibility filter:

ln.Artifact.filter(visibility=None).df()
uid key description suffix kind otype size hash n_files n_observations _hash_type _key_is_virtual _curator _overwrite_versions space_id storage_id version is_latest run_id created_at created_by_id aux _branch_code
id
1 aNGaJdaYZdBNx0mS0000 None mydf .parquet dataset DataFrame 2054 HesrmwkODFQaQpPQYsXffg None None md5 True None False 1 1 None True None 2025-01-12 14:03:00.502408+00:00 1 None -1

You can restore an artifact from trash:

artifact.restore()
ln.Artifact.df()
uid key description suffix kind otype size hash n_files n_observations _hash_type _key_is_virtual _curator _overwrite_versions space_id storage_id version is_latest run_id created_at created_by_id aux _branch_code
id
1 aNGaJdaYZdBNx0mS0000 None mydf .parquet dataset DataFrame 2054 HesrmwkODFQaQpPQYsXffg None None md5 True None False 1 1 None True None 2025-01-12 14:03:00.502408+00:00 1 None 1
ln.Storage.df()
uid root description type region instance_uid space_id run_id created_at created_by_id aux _branch_code
id
1 N5Iih3qHYKVE /home/runner/work/lamindb/lamindb/docs/faq/tes... None local None 4Kf3utIIfnlJ 1 None 2025-01-12 14:02:56.822700+00:00 1 None 1

Permanent delete

Calling artifact.delete on a trashed artifact triggers a permanent delete dialog. You can pass permanent=True to auto-confirm the deletion.

artifact.delete(permanent=True)

Now its gone in the database:

ln.Artifact.filter(visibility=None).df()
uid id key description suffix kind otype size hash n_files n_observations _hash_type _key_is_virtual _curator _overwrite_versions space_id storage_id version is_latest run_id created_at created_by_id aux _branch_code
!lamin delete --force test-delete
 deleting instance testuser1/test-delete