增强 Flask-SqlAlchemy 声明基础

2024-04-19 17:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了以下方法,似乎奏效了:

class BaseModel(db.Model):
    __abstract__ = True

    row_ver = db.Column(db.Integer, nullable=False)

    @declared_attr
    def __mapper_args__(cls):
        return {'version_id_col': cls.row_ver}

    def to_dict(self):
        res = dict()
        for c in self.__table__.columns:
            value = getattr(self, c.name)
            if isinstance(value, date):
                res[c.name] = value.isoformat()
            elif isinstance(value, uuid.UUID):
                res[c.name] = str(value)
            else:
                res[c.name] = value
        return res

class Account(BaseModel):
    __tablename__ = 'account'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)

我不确定这是否是扩充声明性基类的适当方法,也就是说数据库模型班级。上面的代码有什么问题吗?在

同样相关:是否可以通过继承数据库模型(它本身是声明性的),如下所示:

^{pr2}$

Tags: 方法nameselffalsetruedbvaluecolumn