Add & delete metadata#

import lamindb as ln
import lamindb.schema as lns

ln.track()
ℹ️ Instance: testuser1/mydata
ℹ️ User: testuser1
ℹ️ Added notebook: Transform(id='yowZSQXMmZkT', v='0', name='08-add-delete', type=notebook, title='Add & delete metadata', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49))
ℹ️ Added run: Run(id='8FRls4T4CujAdW92XRT3', transform_id='yowZSQXMmZkT', transform_v='0', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49))

Add records#

project_b1 = ln.add(lns.Project(name="B1"))
project_b1
Project(id='FhcaeWKM', name='B1', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49))

Batch insert can be done by providing a list of records.

projects = [lns.Project(name=name) for name in ["B2", "B3", "B4"]]
ln.add(projects)
[Project(id='Xr4D7nwy', name='B2', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49)),
 Project(id='hfOys6YX', name='B3', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49)),
 Project(id='WCAuYgPu', name='B4', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49))]

Update records#

file = ln.select(ln.File, name="iris").first()
file
File(id='sfqjeqshOu4n2OCrxGj4', name='iris', suffix='.parquet', size=5629, hash='jUTdERuqlGv_GyqFfIEb2Q', source_id='aUvAkAwVxam9tDQcKfro', storage_id='8Pj12JLb', created_at=datetime.datetime(2023, 3, 30, 23, 15, 58))

Let’s update the name “iris” to “iris_new”.

file.name = "iris_new"
ln.add(file)
File(id='sfqjeqshOu4n2OCrxGj4', name='iris_new', suffix='.parquet', size=5629, hash='jUTdERuqlGv_GyqFfIEb2Q', source_id='aUvAkAwVxam9tDQcKfro', storage_id='8Pj12JLb', created_at=datetime.datetime(2023, 3, 30, 23, 15, 58), updated_at=datetime.datetime(2023, 3, 30, 23, 16, 49))

Let’s select the same object again to see if the name has changed.

file = ln.select(ln.File, id=file.id).one()
file
File(id='sfqjeqshOu4n2OCrxGj4', name='iris_new', suffix='.parquet', size=5629, hash='jUTdERuqlGv_GyqFfIEb2Q', source_id='aUvAkAwVxam9tDQcKfro', storage_id='8Pj12JLb', created_at=datetime.datetime(2023, 3, 30, 23, 15, 58), updated_at=datetime.datetime(2023, 3, 30, 23, 16, 49))

Delete records#

To delete specific entries, pass records directly to ln.delete

project = ln.select(lns.Project, name="B2").one()
ln.delete(project)
✅ Deleted row [session open] Project(id='Xr4D7nwy', name='B2', created_by='DzTjkKse', created_at=datetime.datetime(2023, 3, 30, 23, 16, 49)) in table Project.

Delete files#

Let us delete a file:

file = ln.select(ln.File, name="paradisi05_laminopathic_nuclei").one()

Important

By default only the record is deleted, and you will be asked to confirm deleting data from storage.

You may set delete_data_from_storage=True to auto confirm the data deletion from storage.

ln.delete(file, delete_data_from_storage=True)
✅ Deleted row [session open] File(id='VWybnO7aZxo8NMu80eHp', name='paradisi05_laminopathic_nuclei', suffix='.jpg', size=29358, hash='r4tnqmKI_SjrkdLzpuWp4g', source_id='bpttr5hRLo73B4m2co3v', storage_id='8Pj12JLb', created_at=datetime.datetime(2023, 3, 30, 23, 15, 50)) in table File.
✅ Deleted object VWybnO7aZxo8NMu80eHp.jpg from storage.

Check that the data is indeed gone from the database.

ln.select(ln.File, name="paradisi05_laminopathic_nuclei").all()
[]

What is in the database, now?#

ln.view()
****************
* module: core *
****************
File
name suffix size hash source_id storage_id created_at updated_at
id
kId2tfidnfLUT9JatfJG possorted_genome_bam .bam 6 HguFGkYNsZBrkJ-7K3mLBw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
pN3ap4esn0TBkJEsb4DB molecule_info .h5 6 YBZ-JAAuZwNT6mjdLqwtGA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
THjan9RLY3JUotzHlYbq filtered_feature_bc_matrix .h5 6 UyuUA2YXfAJBEefQw_wVhA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
jzC6yuaVbt7if2dSso9z features .tsv.gz 6 CPLWI4kM2TYtpVA1GP4B4g 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
DEN1tlUq2AtRJuk02iOZ barcodes .tsv.gz 6 HkZpiKOqDM14o_BdT-jdRg 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
AQ4Cs8pvSSZXLlffNXUZ matrix .mtx.gz 6 0A_HXnvE3DwCXRHYtSknJw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
R8QdanNZelXhxQsfFP0n analysis .csv 6 dYsOqf4SMpTH5HqeAVgCHw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
hwALCxnzc9TC1Q2pF9mM features .tsv.gz 6 amZgim1akXXVSHHxQdCrNA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
CA3s57VaDTleG1Wd21wX barcodes .tsv.gz 6 odGzhNIQSkMOkaVhbkyU5w 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
NgLuRTl6WDHt8bhjZfhj matrix .mtx.gz 6 B9zq5Zvi4gJTGKSCRSn7zQ 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
Folder
name created_by created_at updated_at
id
UnFi8UjBQMV09Jaqo3nL sample_001 DzTjkKse 2023-03-30 23:16:33 None
Project
name created_by created_at updated_at
id
FhcaeWKM B1 DzTjkKse 2023-03-30 23:16:49 None
hfOys6YX B3 DzTjkKse 2023-03-30 23:16:49 None
WCAuYgPu B4 DzTjkKse 2023-03-30 23:16:49 None
Run
name external_id transform_id transform_v created_by created_at
id
bpttr5hRLo73B4m2co3v None None NJvdsWWbJlZS 0 DzTjkKse 2023-03-30 23:15:49
aUvAkAwVxam9tDQcKfro None None OdlFhFWW7qg3 0 DzTjkKse 2023-03-30 23:15:58
obsRwVGjOgOautAvjeiS None None OEbRXnepeCqE 0 DzTjkKse 2023-03-30 23:16:07
4aFiVMrLvr2yiopRZ1Y6 None None QrRtGnxmM3Bo 0 DzTjkKse 2023-03-30 23:16:33
OvcwilVppkGAnRY3YcH5 None None vldHzF3aTAiW 0 DzTjkKse 2023-03-30 23:16:41
8FRls4T4CujAdW92XRT3 None None yowZSQXMmZkT 0 DzTjkKse 2023-03-30 23:16:49
Storage
root type region created_at updated_at
id
8Pj12JLb /home/runner/work/lamindb/lamindb/docs/guide/m... local None 2023-03-30 23:15:36 None
Transform
name type title reference created_by created_at updated_at
id v
NJvdsWWbJlZS 0 03-files TransformType.notebook Track files None DzTjkKse 2023-03-30 23:15:49 None
OdlFhFWW7qg3 0 04-memory TransformType.notebook Track in-memory data objects None DzTjkKse 2023-03-30 23:15:58 None
OEbRXnepeCqE 0 05-existing TransformType.notebook Track data in existing storage locations None DzTjkKse 2023-03-30 23:16:07 None
QrRtGnxmM3Bo 0 06-folder TransformType.notebook Track folders None DzTjkKse 2023-03-30 23:16:33 None
vldHzF3aTAiW 0 07-select TransformType.notebook Query data None DzTjkKse 2023-03-30 23:16:41 None
yowZSQXMmZkT 0 08-add-delete TransformType.notebook Add & delete metadata None DzTjkKse 2023-03-30 23:16:49 None
User
email handle name created_at updated_at
id
DzTjkKse testuser1@lamin.ai testuser1 Test User1 2023-03-30 23:15:36 None
File
name suffix size hash source_id storage_id created_at updated_at
id
kId2tfidnfLUT9JatfJG possorted_genome_bam .bam 6 HguFGkYNsZBrkJ-7K3mLBw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
pN3ap4esn0TBkJEsb4DB molecule_info .h5 6 YBZ-JAAuZwNT6mjdLqwtGA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
THjan9RLY3JUotzHlYbq filtered_feature_bc_matrix .h5 6 UyuUA2YXfAJBEefQw_wVhA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
jzC6yuaVbt7if2dSso9z features .tsv.gz 6 CPLWI4kM2TYtpVA1GP4B4g 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
DEN1tlUq2AtRJuk02iOZ barcodes .tsv.gz 6 HkZpiKOqDM14o_BdT-jdRg 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
AQ4Cs8pvSSZXLlffNXUZ matrix .mtx.gz 6 0A_HXnvE3DwCXRHYtSknJw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
R8QdanNZelXhxQsfFP0n analysis .csv 6 dYsOqf4SMpTH5HqeAVgCHw 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
hwALCxnzc9TC1Q2pF9mM features .tsv.gz 6 amZgim1akXXVSHHxQdCrNA 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
CA3s57VaDTleG1Wd21wX barcodes .tsv.gz 6 odGzhNIQSkMOkaVhbkyU5w 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
NgLuRTl6WDHt8bhjZfhj matrix .mtx.gz 6 B9zq5Zvi4gJTGKSCRSn7zQ 4aFiVMrLvr2yiopRZ1Y6 8Pj12JLb 2023-03-30 23:16:33 NaT
Folder
name created_by created_at updated_at
id
UnFi8UjBQMV09Jaqo3nL sample_001 DzTjkKse 2023-03-30 23:16:33 None
******************
* module: wetlab *
******************
******************
* module: bionty *
******************

And what in storage?#

!ls mytest
ls: cannot access 'mytest': No such file or directory