Database ModelsΒΆ

Create the file moswblog/db.py with the following content:

from score.sa.orm import create_base
from sqlalchemy import Column, String
from sqlalchemy_utils.types.password import PasswordType

Storable = create_base()


class User(Storable):
    username = Column(String(100), nullable=False)
    password = Column(PasswordType(schemes=['pbkdf2_sha512']))


class Blogger(User):
    pass

class Article(Storable):
    author_id = Column(IdType, ForeignKey('_blogger.id'), nullable=False)
    author = relationship('Blogger')
    title = Column(String(200), nullable=False)
    teaser = Column(String, nullable=False)
    body = Column(String, nullable=False)

The base class Storable represents a bunch of classes that reside inside the same database. If we had two distinct databases, we would need to create two different base classes.

The Blogger class does not contain any members yet, but will give us a clear distinction between normal users and those who are allowed to write articles.

The next step is to expand the moswblog configuration file to include the score.sa.orm module.