Skip to main content

Minimalistic ORM for JSON/YAML/Pickle file based DB

Project description

https://badge.fury.io/py/labml-db.svg https://pepy.tech/badge/labml-db

LabML DB

LabML DB is a minimalistic ORM database that uses JSON, YAML or Pickle files. It uses Python typehints as much as possible to help with static checking, and IDE features like autocompletion.

You can install this package using PIP.

pip install labml_db

Example

from labml_db import Model, Index


class Project(Model['Project']):
    name: str
    experiments: int

    @classmethod
    def defaults(cls):
        return dict(name='', experiments=0)


class User(Model['User']):
    name: str
    projects: List[Key[Project]]
    # This is an optional property, will automatically default to None
    occupation: Optional[str]

    @classmethod
    def defaults(cls):
        # Name is not in defaults and not optional.
        # It will be considered a required property
        return dict(projects=[])


class UsernameIndex(Index['User']):
    pass

You can configure it to use JSON/YAML/Pickle files

Model.set_db_drivers([
    FileDbDriver(PickleSerializer(), User, Path('./data/user')),
    FileDbDriver(YamlSerializer(), Project, Path('./data/project'))
])
Index.set_db_drivers([
    FileIndexDbDriver(JsonSerializer(), UsernameIndex, Path('./data/UserNameIndex.yaml'))
])

You can user get_all and Key.load to retrieve models, and save to save models.

proj = Project(name='nlp')
user = User(name='John')
user.projects.append(proj.key)
user.occupation = 'test'
user.save()
proj.save()

keys = User.get_all()
print([k.load() for k in keys])
keys = Project.get_all()
print([k.load() for k in keys])

And index is a hash-map between strings and keys.

user_key = UsernameIndex.get('John')
if not user_key:
    user = User(name='John')
    user.save()
    UsernameIndex.set(user.name, user.key)
else:
    print(user_key.load())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

labml_db-0.0.13.tar.gz (81.1 kB view details)

Uploaded Source

Built Distribution

labml_db-0.0.13-py3-none-any.whl (125.3 kB view details)

Uploaded Python 3

File details

Details for the file labml_db-0.0.13.tar.gz.

File metadata

  • Download URL: labml_db-0.0.13.tar.gz
  • Upload date:
  • Size: 81.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.25.1 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.5

File hashes

Hashes for labml_db-0.0.13.tar.gz
Algorithm Hash digest
SHA256 7a7d92328f3d9555792a6bdc4e9447bb0fb92884495655947a365a37f1b8ab68
MD5 b9254b1d41f928d2fd3ba46069228a37
BLAKE2b-256 b6d6240248b91dd217c246153a815c2987a2d372f41a1a4f2ec080ab9e91a183

See more details on using hashes here.

File details

Details for the file labml_db-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: labml_db-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 125.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.25.1 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.5

File hashes

Hashes for labml_db-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 006cdf08a1bc1d49a7f73588df7f8479dc5dd6df7d7c2b009f62360cf258e2e1
MD5 c535960db1c74934157a876c4473204b
BLAKE2b-256 d46e80e37d9310f9a876f0882f99e75d7da12b047487a27965b6a5d46c775002

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page