Skip to main content

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


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)

Uploaded Source

Built Distribution

pydbrepo-0.8.0-py3-none-any.whl (40.9 kB view details)

Uploaded Python 3

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

Hashes for pydbrepo-0.8.0.tar.gz
Algorithm Hash digest
SHA256 55f8cb4e6b903ac1d20bea8953b6ed8fc7d149986a9f75c7ae06a1337899cd08
MD5 889676db4cf52ce1d243e0fc2aea9573
BLAKE2b-256 448e119c43f9e984c8b7968d7702981f7270ddfb681e07b28d24f54b713c11ae

See more details on using hashes here.

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

Hashes for pydbrepo-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8798bdb8fc362c6ab48f3f1e1e265bf1dad6b2489fd2044d32bd580fe572aeb
MD5 f7a01b311a35a725a928899f626a5dae
BLAKE2b-256 1b25f62851c65c3c94d74ece98829f766e69ce99f9056934bc37486891050dd0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page