DatabaseService¶
The built-in DatabaseService
inherits from BaseService
and
provides an interface for interacting with MySQL and PostgreSQL databases using the
peewee-async manager.
Example¶
from jetfactory.service import DatabaseService
from jetfactory.exceptions import JetfactoryException
from jet_guestbook.model import VisitModel
class VisitService(DatabaseService):
__model__ = VisitModel
async def get_authored(self, visit_id, remote_addr):
visit = await self.get_by_pk(visit_id)
if visit.visitor.ip_addr != remote_addr:
raise JetfactoryException('Not allowed from your IP', 403)
return visit
async def visit_count(self, ip_addr):
return await self.count(VisitModel.visitor.ip_addr == ip_addr)
API¶
-
class
jetfactory.service.
DatabaseService
[source]¶ Service class providing an interface with common database operations
Variables: - __model__ – Peewee.Model
- db_manager – Jetfactory database manager (peewee-async)
-
count
(expression=None, **kwargs)[source]¶ Return the number of records the given query would yield
Parameters: - expression – peewee.Expression (optional)
- kwargs – kwargs to pass along to _get_query_filtered
Returns: count (int)
-
create
(item: dict)[source]¶ Creates new record, returning the record upon success
Parameters: item – item to be inserted Returns: peewee.Model
-
delete
(record_id: int)[source]¶ Deletes a record by id
Parameters: record_id – record id Returns: {‘deleted’: True|False}
-
get_by_pk
(record_id: int)[source]¶ Returns the matching record or raises an exception
Parameters: record_id – the record to query for Returns: peewee.Model
-
get_many
(expression=None, **kwargs)[source]¶ Returns a list of zero or more records
Parameters: - expression – peewee.Expression (optional)
- kwargs – kwargs to pass along to _get_query_filtered
Returns: [peewee.Model]
-
get_one
(*args, **kwargs)[source]¶ Get exactly one record or raise an exception
Parameters: - args – peewee.Expression (optional)
- kwargs – kwargs to pass along to _get_query_filtered
Returns: peewee.Model
-
get_or_create
(item: dict)[source]¶ Get an object or create it with the provided defaults
Parameters: item – item to be fetched or inserted Returns: peewee.Model
-
model
¶ Return service model or raise an exception
Returns: peewee.Model
-
classmethod
register
(pkg, mgr)[source]¶ Class method used internally by the Jetfactory manager to register a Service
Parameters: - pkg – instance of
jetfactory.Jetpack
- mgr – instance of
Jetfactory.JetManager
- pkg – instance of
Important
The __model__ class attribute must be set for Services implementing the DatabaseService.
Models¶
Models are implemented using Peewee.Model.
Example¶
from datetime import datetime
from peewee import Model, ForeignKeyField, CharField, DateTimeField
from .visitor import VisitorModel
class VisitModel(Model):
class Meta:
table_name = 'visit'
created_on = DateTimeField(default=datetime.now)
message = CharField(null=False)
visitor = ForeignKeyField(VisitorModel)
@classmethod
def extended(cls, *fields):
return cls.select(VisitModel, VisitorModel, *fields).join(VisitorModel)