使用 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'
}
我正在使用 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'
}