Simple implementation of repository pattern for database connections.
Project description
PyDBRepo
Is a simple implementation of the Repository pattern to access data in python, providing extensibility flexibility and builtin tools to manage databases with this pattern.
Supported databases
- SQLite
- MySQL
- PostgreSQL
- MongoDB
- Amazon QLDB
Requirements
- Python >= 3.7
Postgres
- psychopg2-binary
Mysql
- mysql-connector-python
MongoDB
- pymongo
- dnspython
Amazon QLDB
- pyqldb
Examples
Entity usage
Entity model
This class brings the build it in methods:
to_dict
: Will take all properties of the created class and will convert it into a dict instance.from_dict
: This will take a dict instance and will set the values of every key into a model property with the same name.from_record
: It takes an ordered Iterable object with the name of the fields that will be loaded into the model, and a tuple with the corresponding values
Entity models will be used with simple class properties or can be used with the Field
descriptor of the package
Example with simple properties
from pydbrepo import Entity
class Model(Entity):
id = None
name = None
model = Model.from_dict({"id": 1, "name": "some"})
# Model({"id": 1, "name": "some"})
print(model.id) # => 1
print(model.name) # => some
Example with property decorators
from pydbrepo import Entity
class Model(Entity):
def __init__(self):
super().__init__()
self.id = None
self.name = None
@property
def id(self):
return self._id
@id.setter
def id(self, value):
self._id = value
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
model = Model.from_dict({"id": 1, "name": "some"})
# Model({"id": 1, "name": "some"})
print(model.id) # => 1
print(model.name) # => some
Example with Field descriptor
from pydbrepo import Entity, Field, named_fields
@named_fields
class Model(Entity):
id = Field(type_=int)
name = Field(type_=str)
model = Model.from_dict({"id": 1, "name": "some"})
# Model({"id": 1, "name": "some"})
print(model.id) # => 1
print(model.name) # => some
Example of casting values with Field descriptor
from uuid import UUID
from pydbrepo import Entity, Field, named_fields
@named_fields
class Model(Entity):
id = Field(type_=(UUID, str), cast_to=UUID, cast_if=str)
name = Field(type_=str)
model = Model.from_dict({"id": '10620c02-d80e-4950-b0a2-34a5f2d34ae5', "name": "some"})
# Model({"id": UUID('10620c02-d80e-4950-b0a2-34a5f2d34ae5'), "name": "some"})
print(model.id) # => 10620c02-d80e-4950-b0a2-34a5f2d34ae5
print(model.name) # => some
Example of casting from a callback function
from datetime import date, datetime
from pydbrepo import Entity, Field, named_fields
def cast_epoch(value):
if isinstance(value, date):
return int(value.strftime("%s"))
if isinstance(value, datetime):
return int(value.timestamp())
@named_fields
class Model(Entity):
name = Field(type_=str)
epoch = Field(type_=(int, date, datetime), cast_to=cast_epoch, cast_if=(date, datetime))
model = Model.from_dict({"name": "some", "epoch": datetime.now()})
# Model({"name": "some", "epoch": 1231231231})
print(model.name) # => some
print(model.epoch) # => 1231231231
Example of iterable fields and casting with Field descriptor
from pydbrepo import Entity, Field, named_fields
@named_fields
class Item(Entity):
name = Field(type_=str)
price = Field(type_=float)
@named_fields
class Model(Entity):
id = Field(type_=int)
name = Field(type_=str)
items = Field(type_=list, cast_items_to=Item)
model = Model.from_dict({
"id": 1,
"name": "some",
"items": [
{"name": "some", "price": 5.99},
{"name": "nothing", "price": 6.99},
]
})
# Model({"id": 1, "name": "some", "items": [Item({"name": "some", "price": 5.99}), Item({"name": "nothing", "price": 6.99})]})
print(model.id) # => 1
print(model.name) # => some
print(model.items) # => [Item({"name": "some", "price": 5.99}), Item({"name": "nothing", "price": 6.99})]
print(model.items[0].price) # => 5.99
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pydbrepo-0.8.0.tar.gz
(23.2 kB
view details)
Built Distribution
pydbrepo-0.8.0-py3-none-any.whl
(40.9 kB
view details)
File details
Details for the file pydbrepo-0.8.0.tar.gz
.
File metadata
- Download URL: pydbrepo-0.8.0.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.0 CPython/3.8.12 Linux/5.8.0-1041-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55f8cb4e6b903ac1d20bea8953b6ed8fc7d149986a9f75c7ae06a1337899cd08 |
|
MD5 | 889676db4cf52ce1d243e0fc2aea9573 |
|
BLAKE2b-256 | 448e119c43f9e984c8b7968d7702981f7270ddfb681e07b28d24f54b713c11ae |
File details
Details for the file pydbrepo-0.8.0-py3-none-any.whl
.
File metadata
- Download URL: pydbrepo-0.8.0-py3-none-any.whl
- Upload date:
- Size: 40.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.0 CPython/3.8.12 Linux/5.8.0-1041-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8798bdb8fc362c6ab48f3f1e1e265bf1dad6b2489fd2044d32bd580fe572aeb |
|
MD5 | f7a01b311a35a725a928899f626a5dae |
|
BLAKE2b-256 | 1b25f62851c65c3c94d74ece98829f766e69ce99f9056934bc37486891050dd0 |