Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
June 13, 2021 02:14 am GMT

Storing python objects inside PysonDB

Let's see how we can store python objects, this include strings, list, function, etc.., inside a DB like pysonDB

Consider I've function foo which takes an argument x and return x * (x + x). Which I want to store inside a DB.

def foo(x: float) -> float:    return x * (x + x)

First things first we nee to convert this object to byte string. To do that we can use the pickle. module.

import picklebyte_string = pickle.dumps(foo)

This byte string cannot be directly added to a PysonDB database, as byte strings are not JSON serializable. So a simple workaround will be to add quotes around the byte string which can be easily done like this.

obj_string = f"{byte_string}"

This string can be now added to the DB

from pysondb import dba = db.getDb("test.json")a.add({    "name": "foo_function",    "obj": obj_string})

To get the object back we can do the following steps.

data = a.getBy({"name": "foo_function"})

Now data will look something like this.

[{'name': 'foo_function', 'obj': "b'\\x80\\x04\\x95\\x14\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x8c\\x08__main__\\x94\\x8c\\x03foo\\x94\\x93\\x94.'", 'id': 316182400052721056}]

To convert the obj string back to a callable function. We can do the following.

str_obj = data[0]["obj"]

Remember that str_obj is still a string and not a byte string, which is what we need, since the required byte string is inside this string, we can simply evaluate the string.

import astbyte_obj = ast.literal_eval(str_obj) 

To call the function we can do this.

call_obj = pickle.loads(byte_obj)print(call_obj(3))# output18

Entire Code

import astimport picklefrom pysondb import dbdef foo(x: float) -> float:    return x * (x + x)byte_string = pickle.dumps(foo)obj_string = f"{byte_string}"a = db.getDb("test2.json")a.add({    "name": "foo_function",    "obj": obj_string})data = a.getBy({"name": "foo_function"})str_obj = data[0]["obj"]byte_obj = ast.literal_eval(str_obj)call_obj = pickle.loads(byte_obj)print(call_obj(3))

So we have successfully stored a python object inside a DB. The steps are the same for all the objects like list or dict.


Original Link: https://dev.to/adwaithrajesh/storing-python-objects-in-pysondb-2f9m

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To