使用STI的Flask-SQLAlchemy:如何自动替换类型字段

时间:2017-03-02 18:44:18

标签: sql python-3.x sqlalchemy flask-sqlalchemy sti

我使用 Flask-SQLAlchemy == 2.2 并拥有STI(Single Table Inheritance)配置,如下所示:

from flask_sqlalchemy import SQLAlchemy


db = SQLAlchemy()


class Item(db.Model):
    __tablename__ = 'item'

    id = db.Column(db.Integer, primary_key=True)
    info = db.Column(db.String(255))
    type = db.Column(db.String())

    __mapper_args__ = {
        'polymorphic_on': type
    }


class ItemA(Item):
    __mapper_args__ = {
        'polymorphic_identity': 'a'
    }


class ItemB(Item):
    __mapper_args__ = {
        'polymorphic_identity': 'b'
    }


class ItemC(Item):
    __mapper_args__ = {
        'polymorphic_identity': 'c'
    }

我想查询特定类型的项目。我可以这样做:

Item.query.filter_by(type='b').all()

有没有机会像以下那样做?

ItemB.query.all()

感谢。

1 个答案:

答案 0 :(得分:2)

它不起作用,因为您不小心使用了连接表继承。 flask-sqlalchemy会自动为您设置__tablename__。如果要进行单表继承,则需要将其显式设置为None

class ItemB(Item):
    __tablename__ = None
    __mapper_args__ = {
        'polymorphic_identity': 'b'
    }