Skip to content

partiallywritten/Kivi.py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kivi.py 🥝

from kivi import Kivi

db = Kivi()
db.kv_create("mydb", {"greeting-1": "Good morning 🌅"})

A simple key-value database that uses JSON to store data

Supported data types

  • String
  • Boolean
  • Integer
  • Float
  • Lists
  • Dict
  • Datetime

Why?

I just wanted a simple database to play around, why everything is so complex

Install

pip install kivi.py

Usage


Initialize database

from kivi import Kivi

db = Kivi(
    src="Where the database files should be stored. Defaults to `os.getcwd()/.kivi_db`",
    to_load=["path/to/file.json"])

Note

to_load only takes json file with default kivi format. If you want to store regular json data use create or merge


Create

Creates a new database and load it to the memory

  • Arguments:

    • name: Name of the database
    • data: Dict consist of data
  • Example:

    db.kv_create("wow", {"user-1": 123456})

Load

Note

It is recommended to load databases when initializing the database with Kivi(to_load=[...])

Loads database into the memory

  • Arguments:

    • data: Path to a json file or python dict
  • Returns: Index of the database

  • Example:

    db.kv_load("/home/test/data/stuff.json")

Get

Get value from a database

  • Arguments:

    • index: Index of the database (returned in kv_load or when creating the instance)
    • key: Key!
  • Example:

    db.kv_get(0, "greeting")

Set / Update

Add or update key in a database

  • Arguments:

    • index: Index of the database (returned in kv_load or when creating the instance)
    • key: Key!
  • Example:

    db.kv_set(0, "gtr1", "greeting")

Merge

Merge data into the database

  • Arguments:

    • index: Index of the database (returned in kv_load or when creating the instance)
    • tomerge: Dict consist of data that needs to be merged
  • Example:

    dt = {
        "thing-1": [123, True, {'user1': 'gibberish?#45'}],
        "thing-2": [123, True, {'user2': 'gibberish?#45', 'nuh': True}]
    }
    db.kv_merge(index=0, tomerge=dt, to_std=True)

Note

If the tomerge dict is not in the kivi formatting, set to_std = True


Index

Index data to perform queries much faster

  • Arguments:

    • data: Data to index (a dict or list of dicts)
    • fields: Json fields that needs to be indexed
    • chars: Amount of characters that indexed key can have (Ex: "Spider" will be sliced to "spi" to create the key for index)
  • Example:

    data = [
        {"title": "Spooder man", "extract": "Marvel spooder man!"},
        {"title": "Iron deficiency man", "extract": "Marvel no Fe?"}
    ]
    db.kv_index(data, ["title", "extract"], 3)

Query

Search for string in an indexed database

  • Arguments:

    • index: Index of the database (returned in kv_load or when creating the instance)
    • query: String to search for in the database
  • Example:

    db.kv_query(0, "Spider man")

Search

Search for string in a database

  • Arguments:

    • index: Index of the database (returned in kv_load or when creating the instance)
    • query: String to search for in the database
    • strict: Pass 'False' to get more results
  • Example:

    db.kv_search(0, "Spider man")

How it works

Data is stored inside json files in the following format

{
    "name": "lot",
    "items": {...}
}

items contains the inserted data as a string alongside it's original data type like this,

{
    "name": "lot",
    "items": {
        "thing-1": [
            "{'user': 'gibberish?#45'}",
            "dict"
        ],
        "thing-2": [
            "{'user': 'gibberish?#45'}",
            "dict"
        ]
    }
}

When you request data using kv_get function, data will be automatically converted back to it's original type (limitations)

Requirements

Limitations

The data convertion has lots of limits as of now (I don't plan of updating this either).

For example:

  • Complex json structures will fail to convert

About

JSON based python key-value database for rapid prototyping

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages