SQLAlchemy声明性orm - 多个表上的模型

时间:2018-05-27 04:43:04

标签: python sqlalchemy flask-sqlalchemy

假设我定义了一个模型,

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一次子类化吗?

0 个答案:

没有答案