SQLAlchemy中抽象类Model和Mixin的区别

Aug*_*Bar 7 python sqlalchemy flask-sqlalchemy

SQLAlchemy 中的 Mixin 可用于在模型之间共享功能和属性。但据我了解,它还实现了使用抽象类的继承。所以我的问题是以下两种实现之间有什么区别:

使用抽象模型:

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.declarative import declared_attr,

db = SQLAlchemy()

class BaseModel(db.Model):
    __abstract__ = True

    @declared_attr
    def iid(cls):
        return db.Column(
            UUID(as_uuid=True),
            primary_key=True,
            default=uuid.uuid4,
            unique=True,
            nullable=False,
        )

    @declared_attr
    def created_on(cls):
        return db.Column(db.DateTime, server_default=db.func.now())

    @declared_attr
    def updated_on(cls):
        return db.Column(
            db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now()
        )

    def save(self):
        db.session.add(self)
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()


class SomeEntity(BaseModel):
     some_field = db.Column(db.String)
Run Code Online (Sandbox Code Playgroud)

使用混合:

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.declarative import declared_attr,

db = SQLAlchemy()

class Mixin(object):
    @declared_attr
    def iid(cls):
        return db.Column(
            UUID(as_uuid=True),
            primary_key=True,
            default=uuid.uuid4,
            unique=True,
            nullable=False,
        )

    @declared_attr
    def created_on(cls):
        return db.Column(db.DateTime, server_default=db.func.now())

    @declared_attr
    def updated_on(cls):
        return db.Column(
            db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now()
        )

    def save(self):
        db.session.add(self)
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()


class SomeEntity(db.Model, Mixin):
     some_field = db.Column(db.String)
Run Code Online (Sandbox Code Playgroud)

这些实现是等效的吗?在什么情况下我应该使用 Mixin 而不是抽象 Model 类?