How do I trash or archive records?¶
Any record in LaminDB has the following 3 levels of visibility through 3 default branches:
1: “default”, visible by default
0: “archive”, excluded from query & search by default
-1: “trash”, excluded from query & search by default
# pip install lamindb
!lamin init --storage test-branch
→ initialized lamindb: testuser1/test-branch
import lamindb as ln
import pandas as pd
→ connected lamindb: testuser1/test-branch
artifact = ln.Artifact.from_dataframe(
pd.DataFrame({"a": [1, 2], "b": [3, 4]}), key="dataset.parquet"
).save()
! no run & transform got linked, call `ln.track()` & re-run
→ writing the in-memory object into cache
An artifact is by default created on the main branch and then visible.
assert artifact.branch.name == "main"
If you delete an artifact, it gets moved into the trash branch.
artifact.delete()
assert artifact.branch.name == "trash"
! moved record to trash (branch_id = -1): Artifact(uid='zpLVOyH9ACO9t7MM0000', version=None, is_latest=True, key='dataset.parquet', description=None, suffix='.parquet', kind='dataset', otype='DataFrame', size=2114, hash='2VmqQBSmMtsP5DmA2rhT2w', n_files=None, n_observations=2, branch_id=-1, space_id=1, storage_id=1, run_id=None, schema_id=None, created_by_id=1, created_at=2025-11-14 00:17:42 UTC, is_locked=False)
Artifacts in trash won’t via default queries:
ln.Artifact.filter(key="dataset.parquet").to_dataframe()
| uid | id | key | description | suffix | kind | otype | size | hash | n_files | n_observations | version | is_latest | is_locked | created_at | branch_id | space_id | storage_id | run_id | schema_id | created_by_id |
|---|
You can query for them by adding the trash branch to the filter.
ln.Artifact.filter(key="dataset.parquet", branch__name="trash").to_dataframe()
| uid | key | description | suffix | kind | otype | size | hash | n_files | n_observations | version | is_latest | is_locked | created_at | branch_id | space_id | storage_id | run_id | schema_id | created_by_id | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | ||||||||||||||||||||
| 1 | zpLVOyH9ACO9t7MM0000 | dataset.parquet | None | .parquet | dataset | DataFrame | 2114 | 2VmqQBSmMtsP5DmA2rhT2w | None | 2 | None | True | False | 2025-11-14 00:17:42.777000+00:00 | -1 | 1 | 1 | None | None | 1 |
You can restore an artifact from trash:
artifact.restore()
assert artifact.branch.name == "main"
ln.Artifact.filter(key="dataset.parquet").to_dataframe()
| uid | key | description | suffix | kind | otype | size | hash | n_files | n_observations | version | is_latest | is_locked | created_at | branch_id | space_id | storage_id | run_id | schema_id | created_by_id | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | ||||||||||||||||||||
| 1 | zpLVOyH9ACO9t7MM0000 | dataset.parquet | None | .parquet | dataset | DataFrame | 2114 | 2VmqQBSmMtsP5DmA2rhT2w | None | 2 | None | True | False | 2025-11-14 00:17:42.777000+00:00 | 1 | 1 | 1 | None | None | 1 |