python flask_sqlalchemy 多态 polymorphic 实现单表继承

sqlalchemy 多态 polymorphic 实现单表继承

sqlaclchemy中的单表继续就是以一个模型类为基类,其他模型类继承基类,所有模型类的的数据都存一张表里面(也可以是多张,只不过基类模型类的字段是共享的)

下面建立三个模型类(表)

class Human(db.Model):
__tablename__ = 'human'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
gender = db.Column(db.Integer) # 1: man 2: woman
__mapper_args__ = {
'polymorphic_on': gender, # 指定了多态表哪个字段区分该条记录是属于哪个继承表
} class Man(Human):
__tablename__ = 'man'
id = db.Column(db.Integer, db.ForeignKey('human.id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True)
man = db.Column(db.String(50))
other = db.Column(db.String(50))
__mapper_args__ = {
'polymorphic_identity': 1, # 当gender=1时的表记录为Man
} class Woman(Human):
__tablename__ = 'woman'
id = db.Column(db.Integer, db.ForeignKey('human.id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True)
woman = db.Column(db.String(50))
__mapper_args__ = {
'polymorphic_identity': 2, # 当gender=2时的表记录为Woman
}

Man 和 Woman类都继承了Human类,我们在类里面通过__mapper_args__参数来定义多态表,以及区分继续表。

当我们想查询man所有的数据时:

Man.query.all()

相当于:

select * from human where gender=1
上一篇:Hadoop阅读笔记(三)——深入MapReduce排序和单表连接


下一篇:MapReduce编程系列 — 5:单表关联