Skip to content
This repository has been archived by the owner on Apr 15, 2019. It is now read-only.

miron0xff/zerorm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

You should probably use alkali if you want to use JSON as DB.

Zerorm

Zerorm is trying to combine TinyDB, Schematics and Lifter together to look like an ORM.

Installation

pip install zerorm

Usage

First declare a model with TinyDB's instance attached to it:

from zerorm import db, models

database = db('db.json')


class Message(models.Model):
    author = models.StringType(required=True)
    author_email = models.EmailType()
    text = models.StringType()
    replies = models.IntType(min_value=0)

    class Meta:
        database = database

Now create some objects:

>>> from models import Message
>>>
>>> bob_message = Message(author='Bob',
...                       author_email='bob@example.com',
...                       text='Hello, everyone!')
>>> bob_message
<Message: Message object>
>>> bob_message.save()  # Save object
1
>>>
>>> bob_message.replies = 1
>>> bob_message.save()  # Update object
>>>
>>> alice_message = Message.objects.create(author='Alice',
...                                        text='Hi, Bob!',
...                                        replies=0)
>>> alice_message
<Message: Message object>

And try to retrieve them via objects

>>> Message.objects.all()
<QuerySet, len() = 2>
>>> list(Message.objects.all())
[<Message: Message object>, <Message: Message object>]
>>>
>>> second_message = Message.objects.get(id=2)
>>> second_message.author
'Alice'
>>>
>>> Message.objects.filter(replies__gte=1)  # Only Bob's message has 1 replies
<QuerySet, len() = 1>
>>> list(Message.objects.filter(replies__gte=1))
[<Message: Message object>]

You can redefine model's __str__ method for better repr.

class Message(models.Model):
    ...

    def __str__(self):
        return 'by {}'.format(self.author)
>>> list(Message.objects.all())
[<Message: by Bob>, <Message: by Alice>]

License

MIT. See LICENSE for details.

About

Looks like ORM and stores your data

Resources

License

Stars

Watchers

Forks

Packages

No packages published