我使用 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()
感谢。
答案 0 :(得分:2)
它不起作用,因为您不小心使用了连接表继承。 flask-sqlalchemy会自动为您设置__tablename__
。如果要进行单表继承,则需要将其显式设置为None
:
class ItemB(Item):
__tablename__ = None
__mapper_args__ = {
'polymorphic_identity': 'b'
}