我正在尝试使用基表上的复合键创建类表继承。我正在尝试创建类似于 this answer 的时间。但是,我正在创建的表格是
EntityWithImages
、Experiment
、Sample
和Images
;到目前为止我的代码是,
class EntityWithImages(db.Model):
__tablename__ = "entity_images"
id = db.Column(db.Integer, primary_key=True)
entity_type = db.Column(db.String(32), nullable=False)
__mapper_args__ = {
"polymorphic_on": entity_type,
"polymorphic_identity": "entity_with_images",
}
class Experiment(TimeStampAuditMixin, EntityWithImages):
__tablename__ = "experiment"
# id = db.Column(db.Integer, primary_key=True)
id = db.Column(None, db.ForeignKey('entity_images.id'), primary_key=True)
experiment_name = db.Column(db.Text, unique=True)
samples = db.relationship("Sample", back_populates="experiment", foreign_keys="Sample.id")
__mapper_args__ = {
"polymorphic_identity": "experiment",
}
def __str__(self):
return self.experiment_name
class Sample(TimeStampAuditMixin, EntityWithImages):
__tablename__ = "sample"
# id = db.Column(db.Integer, primary_key=True)
id = db.Column(None, db.ForeignKey('entity_images.id'), primary_key=True)
sample_name = db.Column(db.Text, unique=True)
experiment_id = db.Column(db.ForeignKey("experiment.id", ondelete="CASCADE"))
experiment = db.relationship("Experiment", back_populates="samples", foreign_keys=experiment_id)
id: int
sample_name: str
s3_uri: str
experiment_id: int
experiment: "Experiment"
__mapper_args__ = {
"polymorphic_identity": "sample",
}
def __str__(self):
return self.sample_name
class ImageSource(db.Model):
__tablename__ = "image_source"
id = db.Column(db.Integer, primary_key=True)
entity_images_id = db.Column(db.ForeignKey("entity_images.id", ondelete="CASCADE"))
我不清楚如何在相应的
entity_type
和Experiment
表中详细说明Sample
的值,即在Experiment
表中我希望默认entity_type
为experiment
。
我目前正在使用
SQLAlchemy==1.4.46