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
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