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.6.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

labml_db-0.0.6-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: labml_db-0.0.6.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0.post20191030 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.5

File hashes

Hashes for labml_db-0.0.6.tar.gz
Algorithm Hash digest
SHA256 1f48d2ba0e4f4cefac3f81d0ca1a86fccff8553b9e77b301011c4b096f36f922
MD5 6bbed0bd774555c13fa7405e5d97a66d
BLAKE2b-256 f9043cac5de5c6b7f3a115d72887a620e6b0b4e2ede27812faeadff289dab5a1

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for labml_db-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b6693446c863c520f5da518ea6a35d773f3d666317e6eb17454bb70d425c865c
MD5 7402901e81fe7e823901ed1025980c11
BLAKE2b-256 27a135ee16e7de13dfbdeac19fd9914a5ab20f50fe3f02269e92314d0aeb6d90

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