2020-08-03 03:54:23 +03:00
2020-08-03 03:54:23 +03:00
2020-08-01 16:57:37 +03:00
2020-08-01 03:12:00 +03:00
2020-08-03 03:54:23 +03:00

Datalite

Datalite is a simple Python package that binds your dataclasses to a table in a sqlite3 database, using it is extremely simple, say that you have a dataclass definition, just add the decorator @datalite(db_name="db.db") to the top of the definition, and the dataclass will now be bound to the file db.db

For example:

from dataclasses import dataclass
from datalite import datalite


@datalite(db_path="db.db")
@dataclass
class Student:
    student_id: int
    student_name: str = "John Smith"

This snippet will generate a table in the sqlite3 database file db.db with table name student and rows student_id, student_name with datatypes integer and text, respectively. The default value for student_name is John Smith.

Entry manipulation

After creating an object traditionally, given that you used the datalite decorator, the object has two new methods: .create_entry() and .remove_entry(), you can add the object to its associated table using the former, and remove it using the latter.

student = Student(10, "Albert Einstein")
student.create_entry()  # Adds the entry to the table associated in db.db
student.remove_entry()  # Removes from the table.

But what if you have created your object in a previous session, or wish to remove an object unreachable? ie: If the object is already garbage collected by the Python interpreter? remove_from(class_, obj_id) is a function that can be used for this express purpose, for instance:

remove_from(Student, 2)  # Removes the Student with obj_id 2.

Object IDs are auto-incremented, and correspond to the order the entry were inserted onto the system.

Fetching Records

⚠️ Limitation! Fetch can only fetch limited classes correctly: int, float and str!

Finally, you may wish to recreate objects from a table that already exist, for this purpose we have the function fetch_from(class_, object_id) as well as is_fetchable(className, object_id) former fetches a record from the SQL database whereas the latter checks if it is fetchable (most likely to check if it exists.)

>>> fetch_from(Student, 2)
Student(student_id=10, student_name='Albert Einstein')

Finally, we have two helper methods, fetch_range(class_, range_) and fetch_all(class_) the former fetches the records fetchable from the object id range provided by the user, whereas the latter fetches all records. Both return a tuple of class_ objects.

Description
Simple to use async Python library that can bind a dataclass to an sqlite3 database
Readme MIT 5.9 MiB
Languages
Python 99.9%
Shell 0.1%