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

Flask-SQLAlchemy using STI: how to automatically substitute type field

我正在使用 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()

谢谢。

它不起作用,因为您不小心使用了连接的 table 继承。 flask-sqlalchemy 会自动为你设置 __tablename__。如果你想要单 table 继承,你需要明确地将它设置为 None

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