Предположим, я определяю модель,
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
- это смесь / основа для различных типов или «подклассов» результатов, каждый из которых определяет __tablename__
.В моем приложении я также хотел бы иметь возможность размещать временные Result
s в базе данных, которые живут до 24 часов;триггер для временной таблицы уничтожит все результаты
С ORM в SQLALchemy мне неясно, как это сделать без определения другого класса для каждого временного результата.Есть ли элегантный способ сделать это?
Возможно, мне следует добавить столбец type
к Result
, так как между типами результатов изменяется только столбец data / JSONB, а затем все типы Results
живут в одной таблице, и у меня есть толькоподкласс с TempResult
один раз?