Skip to main content

A simple and async json database.

Project description

simple-json-db

This is a simple json database. The package provides a simple ORM between python objects and json objects with a well type-hinted schema.

engine = AppEngine()

async with engine.students as students:
    students.add_range(Student("John", "Doe"), Student("Jane", "Doe"))

async for student in engine.students:
    print(student.first_name, student.last_name)
    # Can you guess ? )

This package maps your python objects to json and then you can save, get, modify or delete them using async methods.

This package is for tiny and simple projects. with a low amount of data.

Installation

The package is available at PYPI as json-entity.

Intro

Let's see how you can get started with the package.

See also our Wiki.

You can take a look at src/examples, if you're not on reading mode.

Quick Start

This data base consist of 3 main elements:

1- Model

It's obvious that you should have a model for your data to save, update, or ...

Since this library works with json, your model can contain everything
that JSON can.

2- Collection

You have a collection of data for every model, therefor,
The relation between Model and Collection is one to one.

3- Engine

This is where all collections are operate.

So, Every Engine has some Collections where each collection contains a set of an unique Model.

Let's create a model

Models are simple python class.

from sjd import TEntity, Engine, properties as props

@props.auto_collect()
class Person(TEntity):
    def __init__(self, first_name: int, last_name: str, age: int):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

Using auto_collect() method, the model will automatically collect properties form __init__ method.

Creating collection ?

It's really not necessary to create a collection by your own! And maybe you better )

Let us do that for ya ( Of course you can create customized Collections ).

Setup engine

Now you need to setup database's engine and define your collections there.

# ---- sniff ----

class AppEngine(Engine):
    __db_path__ = "my_database"
    persons = Engine.set(Person)

That's all you need to do for now.

Fire up

Now it's time for some fireworks 🎇.

Since the package is async, you'll need an event loop for it.

import asyncio

# ---- sniff ----

async def main():
    ...


if __name__ == "__main__":
    asyncio.run(main())

Now you can work with database inside main function.

async def main():

    engine = AppEngine()
    collection = engine.persons

    async with collection:
        collection.add_range(
            Person("John", "Doe", 20),
            Person("Jane", "Doe", 21),
            Person("Jack", "jones", 22),
            Person("Jill", "jones", 23),
        )

Iterate over all persons in the collection

async for person in collection:
    print(person.first_name, person.last_name, person.age)

You can do more advanced query stuff with queryable context.

async with collection.get_queryable() as persons:
    async for person in persons.where(lambda p: p.age > 21):
        print(person.first_name, person.last_name, person.age)

Or get only one directly.

target = await collection.get_first_async(lambda s: s.first_name, "John")

You can easily update your data:

async with collection.get_queryable() as persons:
    async for person in persons.where(lambda p: p.last_name == "jones"):
        person.last_name = "Jones"

await collection.save_changes_async()

Or even delete them ...

async with collection.get_queryable() as persons:
    async for person in persons.where(lambda p: p.last_name == "Doe"):
        collection.delete(person)

await collection.save_changes_async()

There're a lot more! see src/examples.

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

json-entity-0.1.3.1.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

json_entity-0.1.3.1-py3-none-any.whl (38.3 kB view details)

Uploaded Python 3

File details

Details for the file json-entity-0.1.3.1.tar.gz.

File metadata

  • Download URL: json-entity-0.1.3.1.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for json-entity-0.1.3.1.tar.gz
Algorithm Hash digest
SHA256 9b3c00647a80a4dfc7440eef3427a3f7b43e3778e6f66726e38194af4fba8d38
MD5 db9a13ad2ecebf1e545df8af7f468e65
BLAKE2b-256 82e3ba338ef3dff1c79df7e7230831d5304dd198d2b9b1514b14839c341b146b

See more details on using hashes here.

File details

Details for the file json_entity-0.1.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for json_entity-0.1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b64fb1d6051bececf45ce909c191603a29354d72e7e0280f995c96f18ab85f9a
MD5 3dc6a5b810926a87894aa88eb27ce59d
BLAKE2b-256 07f07445491e8a0e9d44503dd203d20f4abff23204392e97bdf557d0f4f8871d

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