SQLAlchemy mixin in method#
If I'm not wrong, the SQLAlchemy official doc provides some examples to explain how to share a set of common columns, some common table options, or other mapped properties, across many classes. But I cannot find how to share common methods (e.g. your customized to_dict() method). This post will just show you a POC to achieve this goal by using Python Mixin.
Share the common method to_dict() across two SQLAlchemy models#
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class ModelMixin(object):
def to_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
class ModelA(Base, ModelMixin):
__tablename__ = "model_a"
model_id = Column(Integer, primary_key=True)
name = Column(String)
class ModelB(Base, ModelMixin):
__tablename__ = "model_b"
model_id = Column(Integer, primary_key=True)
name = Column(String)
Test: