class UserAddress(db.Model): __tablename__ = 'user_address' id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) address_id = db.Column(db.Integer, db.ForeignKey('address.id'), primary_key=True)
class Phone(db.Model): """ User Model for storing user related details """ __tablename__ = "phone" id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255), unique=True, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
class Product(db.Model): __tablename__ = 'product' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, nullable=False) # currency = db.Column(CurrencyType, default=Currency('KSH')) price = db.Column(db.Numeric(precision=9, scale=2)) discount = db.Column(db.Numeric(precision=5), nullable=True) category_id = db.Column(db.Integer, db.ForeignKey("category.id")) category = db.relationship(Category, backref="products") slug = db.Column(db.String) _email = db.Column(db.String) @hybrid_property def email(self): return self._email @email.setter def email(self, email): self._email = email @observes('name') def compute_slug(self, name): """ Computes the slug - shortened version of the title. :param title: string, title to be shortened :return: string, resulting slug """ self.slug = slugify(name)
class Tag(db.Model): __tablename__ = 'tag' id = db.Column(db.Integer, primary_key=True) label = db.Column(db.String) parent_id = db.Column(db.Integer, db.ForeignKey('tag.id')) parent = db.relationship('Tag', remote_side=[id], backref='children') text_array = db.Column(ARRAY(db.String)) # makes sense for product and product variations
class Engineer(Employee): __tablename__ = 'engineer' id = db.Column(db.Integer, db.ForeignKey('employee.id'), primary_key=True) engineer_name = db.Column(db.String(30)) __mapper_args__ = { 'polymorphic_identity': 'engineer', } def __repr__(self): return f'Engineer {self.engineer_name}'
class Boss(Employee): __tablename__ = 'boss' id = db.Column(db.Integer, db.ForeignKey('employee.id'), primary_key=True) boss_name = db.Column(db.String(30)) __mapper_args__ = { 'polymorphic_identity': 'boss', } def __repr__(self): return f'Boss {self.boss_name}'
from instance import db category_tree = db.Table( 'category_tree', db.Column('parent_id', db.Integer, db.ForeignKey('category.id')), db.Column('children_id', db.Integer, db.ForeignKey('category.id')) ) class Category(db.Model): __tablename__ = 'category' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100)) children = db.relationship( 'Category', secondary=category_tree, primaryjoin=(category_tree.c.parent_id == id), secondaryjoin=(category_tree.c.children_id == id), backref=db.backref('parents', lazy='dynamic'), lazy='dynamic' ) def __repr__(self): return '<Category> {}'.format(self.id) # a child has a list of parents # a parent has a list of children