文章内容
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')
评论列表