python object database


Keywords
python, object, database
License
MIT
Install
pip install podb==1.51

Documentation

podb

Build Status Maintainability

(p)ython (o)bject (d)ata(b)ase

thread safe, file based, redis style database for python objects

it really just is shelve with a hat on

reasons not to use this

  • you want a database cluster
  • you have multiple billions of database entries and limited storage space
  • you need relationships

reasons to use this

  • pure python
  • cross-platform (Tested: Windows & Linux)
  • fast
    • inserting 200 objects takes
      • ~0.0003 seconds (i7-4702MQ)
      • ~0.0001 seconds (Ryzen 9 3900xt)
    • 8-8.3k inserts per second (Ryzen 7 2700X)
    • 19k inserts per second (Ryzen 9 3900xt)
  • thread safe
  • stores python objects
  • filters, see below
  • ~180 loc

functions

  • find
  • find_one
  • find_after
  • find_before
  • find_by_uuid
  • find_contains
  • find_startswith
  • find_endswith
  • insert
  • insert_many
  • update
  • update_many
  • upsert
  • upsert_many
  • size
  • contains
  • columns
  • drop
  • delete
  • delete_by_uuid
  • delete_before
  • get_all
  • get_random
  • get_random_list

example

from podb import DB, DBEntry


class Company(DBEntry):
    def __init__(self, name: str):
        DBEntry.__init__(self)
        self.name = name

class Customer(DBEntry):
    def __init__(self, first_name: str, last_name: str, age: int,
                 height: float, companies: list[DBEntry]):
        DBEntry.__init__(self)
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.height = height
        self.companies = companies

db = DB("customers")

c0 = Customer("Jeff", "Bezoz", 42, 1.69,
              [Company("Whole Foods"), Company("Zappos"),
               Company("Ring"), Company("twitch")])
db.insert(c0)

c0 = db.find_one({
    "first_name": "Jeff",
    "last_name": "Bezoz"
})

c0.companies.append(Company("Audible"))

db.update(c0)

installation

pip3 install podb