文章内容

2018/7/29 9:41:15,作 者: 黄兵

SQLAlchemy 产品模型设计

最近需要设计一个产品表,类似于网上商城的这种:

具体代码如下:

# 材料类别
class MaterialClassification(db.Model):
    __tablename__ = 'material_classification'
    id = db.Column(db.Integer, primary_key=True)
    classification_name = db.Column(db.String(64), index=True, unique=True)
    classification_icon = db.Column(db.String(64))
    classification_since = db.Column(db.DateTime, default=datetime.utcnow)
    classification_catalog = db.relationship('ClassificationCatalog', backref='MaterialClassification', lazy='dynamic')


# 类别目录
class ClassificationCatalog(db.Model):
    __tablename__ = 'classification_catalog'
    id = db.Column(db.Integer, primary_key=True)
    catalog_name = db.Column(db.String(64), index=True)
    classification_id = db.Column(db.Integer, db.ForeignKey('material_classification.id'))
    catalog_since = db.Column(db.DateTime, default=datetime.utcnow)


# 材料品牌
class MaterialClassificationBrand(db.Model):
    __tablename__ = 'material_brand'
    b_id = db.Column(db.Integer, primary_key=True)
    b_name = db.Column(db.VARCHAR(50), index=True)
    b_rel_id = db.Column(db.Integer, db.ForeignKey('material_item.i_id'))
    material_product = db.relationship('MaterialProduct', backref='MaterialClassificationBrand')


# 材料项目
class MaterialItem(db.Model):
    __tablename__ = 'material_item'
    i_id = db.Column(db.Integer, primary_key=True)
    i_name = db.Column(db.UnicodeText(50))
    i_parent_id = db.Column(db.Integer, db.ForeignKey('material_item.i_id'))
    material_brand = db.relationship('MaterialClassificationBrand', backref='MaterialItem')
    material_product = db.relationship('MaterialProduct', backref='MaterialItem')
    i_fk_i = db.relationship('MaterialItem')
    i_ref_pn = db.relationship('MaterialProductName', backref='MaterialItem')


# 具体产品
class MaterialProduct(db.Model):
    __tablename__ = 'material_product'
    p_id = db.Column(db.Integer, primary_key=True)
    p_name = db.Column(db.VARCHAR(50), default=None)
    b_name = db.Column(db.VARCHAR(50), db.ForeignKey('material_brand.b_name'), default=None, index=True)
    p_fk_p = db.Column(db.Integer, db.ForeignKey('material_product.p_id'), default=None, index=True)
    p_fk_i = db.Column(db.Integer, db.ForeignKey('material_item.i_id'), default=None, index=True)
    p_rel_p = db.relationship('MaterialProduct')
    p_rel_pp = db.relationship('MaterialProductProperty', backref='material_product')


# 产品属性
class MaterialProductProperty(db.Model):
    __tablename__ = 'material_product_pro'
    pp_id = db.Column(db.Integer, primary_key=True)
    pp_fk_p = db.Column(db.Integer, db.ForeignKey('material_product.p_id'), index=True)
    pp_fk_pv = db.Column(db.Integer, db.ForeignKey('material_product_value.pv_id'), index=True)
    pp_fk_pn = db.Column(db.Integer, db.ForeignKey('material_pro_name.pro_id'), index=True)


# 产品sku
class MaterialProductSKU(db.Model):
    __tablename__ = 'material_product_sku'
    ps_id = db.Column(db.Integer, primary_key=True)
    pd_fk_id = db.Column(db.Integer, db.ForeignKey('material_product.p_id'), default=None, index=True)
    pd_num = db.Column(db.Integer, default=None)
    pd_price = db.Column(db.DECIMAL(10, 4), default=None)
    pd_name = db.Column(db.VARCHAR(50), default=None)
    pd_properties = db.Column(db.VARCHAR(300), default=None)


# 产品名称
class MaterialProductName(db.Model):
    __tablename__ = 'material_pro_name'
    pro_id = db.Column(db.Integer, primary_key=True)
    pro_name = db.Column(db.VARCHAR(50))
    pro_fk_id = db.Column(db.Integer, db.ForeignKey('material_item.i_id'), index=True)
    pro_has_otherName = db.Column(db.CHAR(2), default=0)
    pro_has_color = db.Column(db.CHAR(2), default=0)
    pro_has_enum = db.Column(db.CHAR(2), default=0)
    pro_has_input = db.Column(db.CHAR(2), default=0)
    pro_is_key = db.Column(db.CHAR(2), default=0)
    pro_is_sale = db.Column(db.CHAR(2), default=0)
    pro_is_must = db.Column(db.CHAR(2), default=0)
    pn_rel_pv = db.relationship('MaterialProductValue', backref='material_pro_name')
    pn_rel_pp = db.relationship('MaterialProductProperty', backref='material_pro_name')


# 材料值表
class MaterialProductValue(db.Model):
    __tablename__ = 'material_product_value'
    pv_id = db.Column(db.Integer, primary_key=True)
    pv_name = db.Column(db.VARCHAR(50))
    pv_fk_pid = db.Column(db.Integer, db.ForeignKey('material_pro_name.pro_id'), index=True)
    pv_rel_pp = db.relationship('MaterialProductProperty', backref='material_product_value')





分享到:

发表评论

评论列表