码迷,mamicode.com
首页 > 数据库 > 详细

sqlalchemy 多态 polymorphic 实现单表继承

时间:2021-02-04 11:49:21      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:通过   alc   The   继承   gen   字段   where   mode   from   

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‘
    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‘
    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

sqlalchemy 多态 polymorphic 实现单表继承

标签:通过   alc   The   继承   gen   字段   where   mode   from   

原文地址:https://www.cnblogs.com/guapitomjoy/p/14366900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!