pantherdb icon indicating copy to clipboard operation
pantherdb copied to clipboard

Document Oriented File-Base Database

PyPI PyVersion Downloads license

Introduction

PantherDB is a Simple, FileBase and Document Oriented database that you can use in your projects.

Features:

  • Document Oriented
  • Easy to use
  • Written in pure Python +3.8 based on standard type hints
  • Handle Database Encryption
  • Singleton connection per db_name

Usage

Database:

  • Create a database:

    db: PantherDB = PantherDB('database.pdb')
    
  • Create an encrypted database:

    Required cyptography install it with pip install pantherdb[full]

    from cryptography.fernet import Fernet
    key = Fernet.generate_key()  # Should be static (You should not generate new key on every run)
    db: PantherDB = PantherDB('database.pdb', secret_key=key)
    
  • Access to a collection:

    user_collection: PantherCollection = db.collection('User')
    
  • Delete a collection:

    db.collection('User').drop()
    

Create:

  • Insert document:

    user: PantherDocument = db.collection('User').insert_one(first_name='Ali', last_name='Rn')
    

Get:

  • Find one document:

    user: PantherDocument = db.collection('User').find_one(first_name='Ali', last_name='Rn')
    

    or

    user: PantherDocument = db.collection('User').find_one()
    
  • Find first document (alias of find_one()):

    user: PantherDocument = db.collection('User').first(first_name='Ali', last_name='Rn')
    

    or

    user: PantherDocument = db.collection('User').first()
    
  • Find last document:

    user: PantherDocument = db.collection('User').last(first_name='Ali', last_name='Rn')
    

    or

    user: PantherDocument = db.collection('User').last()
    
  • Find documents:

    users: list[PantherDocument] = db.collection('User').find(last_name='Rn')
    

    or all documents

    users: list[PantherDocument] = db.collection('User').find()
    
  • Count documents:

    users_count: int = db.collection('User').count(first_name='Ali')
    

Update:

  • Update a document:

    user: PantherDocument = db.collection('User').find_one(first_name='Ali', last_name='Rn')
    user.update(name='Saba')
    
  • Filter and Update a document:

    _filter = {'first_name': 'Ali', 'last_name': 'Rn'}
    is_updated: bool = db.collection('User').update_one(_filter, first_name='Saba')
    
  • Filter and Update many:

    _filter = {'first_name': 'Ali'}
    updated_count: int = db.collection('User').update_many(_filter, first_name='Saba')
    

Delete:

  • Delete a document:

    user: PantherDocument = db.collection('User').first(first_name='Ali', last_name='Rn')
    user.delete()
    
  • Filter and Delete a document:

    is_deleted: bool = db.collection('User').delete_one(first_name='Ali', last_name='Rn')
    
  • Filter and Delete many:

    deleted_count: int = db.collection('User').delete_many(last_name='Rn')
    

TODO:

  • [x] Add encryption
  • [ ] Complete tests TODO
  • [ ] Add B+ tree