假设我定义了一个模型,
from app import db
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.dialects.postgresql import JSONB
class Result(object):
# identification
id = db.Column(db.Integer, primary_key=True)
@declared_attr
def job_id(cls):
return db.Column(db.Integer, db.ForeignKey('jobs.id'))
@declared_attr
def job(cls):
return db.relationship('Job')
item = db.Column(db.String, nullable=False)
when_completed = db.Column(db.DateTime, nullable=False)
# payload
data = db.Column(JSONB, nullable=False)
class AxialColorResult(Result, db.Model):
__tablename__ = 'axial_color'
class LateralColorResult(Result, db.Model):
__tablename__ = 'lateral_color'
class DistortionResult(Result, db.Model):
__tablename__ = 'distortion'
...
Result
是结果的不同类型或“子类”的mixin / base,每个都定义__tablename__
。在我的应用程序中,我还希望能够在数据库上暂存Result
,该数据库可以存活长达24小时;临时表上的触发器将擦除所有结果< func.now() - 24小时。
使用SQLALchemy的ORM,我不清楚如何在不为每个临时结果定义另一个类的情况下执行此操作。有一种优雅的方式来实现这一目标吗?
也许我应该向type
添加Result
列,因为只有data / JSONB列在结果类型之间发生更改,然后所有类型的Results
都存在于同一个表中,并且我只需要用TempResult
一次子类化吗?