How to delete records?¶
Registry records can be deleted with record.delete(), which will permanently remove them from your database.
When it comes to records of File 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=Trueis passed, callingrecord.delete()triggers permanent delete.During permanent deletion of a record, its artifact in storage is also deleted unless it has a semantic
key.
Setup¶
!lamin init --storage test-delete
💡 connected 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 get linked, consider calling ln.track()
Artifact(updated_at=2024-05-20 08:58:12 UTC, uid='WzjKPWg06AcJmlYlGhTB', suffix='.parquet', accessor='DataFrame', description='mydf', size=2240, hash='pCh1QueKcIO78R19tjOUag', hash_type='md5', visibility=1, key_is_virtual=True, created_by_id=1, storage_id=1)
ln.Artifact.df()
| version | created_at | created_by_id | updated_at | uid | storage_id | key | suffix | accessor | description | size | hash | hash_type | n_objects | n_observations | transform_id | run_id | visibility | key_is_virtual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | |||||||||||||||||||
| 1 | None | 2024-05-20 08:58:12.147945+00:00 | 1 | 2024-05-20 08:58:12.148019+00:00 | WzjKPWg06AcJmlYlGhTB | 1 | None | .parquet | DataFrame | mydf | 2240 | pCh1QueKcIO78R19tjOUag | md5 | None | None | None | None | 1 | True |
Trash an artifact¶
artifact.delete()
❗ moved artifact to trash (visibility = -1)
No longer visible:
ln.Artifact.df()
| version | created_at | updated_at | uid | key | suffix | accessor | description | size | hash | hash_type | n_objects | n_observations | visibility | key_is_virtual | created_by_id | storage_id | transform_id | run_id | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id |
But the artifact still exists in the database, you can find it by not filtering for visibility:
ln.Artifact.filter(visibility=None).df()
| version | created_at | created_by_id | updated_at | uid | storage_id | key | suffix | accessor | description | size | hash | hash_type | n_objects | n_observations | transform_id | run_id | visibility | key_is_virtual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | |||||||||||||||||||
| 1 | None | 2024-05-20 08:58:12.147945+00:00 | 1 | 2024-05-20 08:58:12.195309+00:00 | WzjKPWg06AcJmlYlGhTB | 1 | None | .parquet | DataFrame | mydf | 2240 | pCh1QueKcIO78R19tjOUag | md5 | None | None | None | None | -1 | True |
You can restore an artifact from trash:
artifact.restore()
ln.Artifact.df()
| version | created_at | created_by_id | updated_at | uid | storage_id | key | suffix | accessor | description | size | hash | hash_type | n_objects | n_observations | transform_id | run_id | visibility | key_is_virtual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id | |||||||||||||||||||
| 1 | None | 2024-05-20 08:58:12.147945+00:00 | 1 | 2024-05-20 08:58:12.244902+00:00 | WzjKPWg06AcJmlYlGhTB | 1 | None | .parquet | DataFrame | mydf | 2240 | pCh1QueKcIO78R19tjOUag | md5 | None | None | None | None | 1 | True |
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()
| version | created_at | updated_at | uid | key | suffix | accessor | description | size | hash | hash_type | n_objects | n_observations | visibility | key_is_virtual | created_by_id | storage_id | transform_id | run_id | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id |