Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/danteay/pydbrepo
Simple implementation of repository pattern for database connections.
https://github.com/danteay/pydbrepo
Last synced: about 1 month ago
JSON representation
Simple implementation of repository pattern for database connections.
- Host: GitHub
- URL: https://github.com/danteay/pydbrepo
- Owner: danteay
- License: mit
- Created: 2021-07-26T13:31:34.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-09-28T20:51:40.000Z (over 3 years ago)
- Last Synced: 2024-11-07T21:46:22.323Z (about 2 months ago)
- Language: Python
- Size: 284 KB
- Stars: 4
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# 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 valuesEntity models will be used with simple class properties or can be used with the `Field` descriptor of the package
##### Example with simple properties
```python
from pydbrepo import Entityclass Model(Entity):
id = None
name = Nonemodel = Model.from_dict({"id": 1, "name": "some"})
# Model({"id": 1, "name": "some"})print(model.id) # => 1
print(model.name) # => some
```##### Example with property decorators
```python
from pydbrepo import Entityclass 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 = valuemodel = Model.from_dict({"id": 1, "name": "some"})
# Model({"id": 1, "name": "some"})print(model.id) # => 1
print(model.name) # => some
```##### Example with Field descriptor
```python
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
```python
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
```python
from datetime import date, datetime
from pydbrepo import Entity, Field, named_fieldsdef 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
```python
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
```