class SteelMixin(CalculatorMixin): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @classmethod def get_by_key(cls, name, spec, material, source, date): spec = spec or '' material = material or '' source = source or '' query = cls.query query = query.filter(cls.name == name).filter(cls.spec == spec).filter(cls.material == material) query = query.filter(cls.source == source).filter(cls.date == date) return query.one_or_none() def upsert(self): result = self.get_by_key(self.name, self.spec, self.material, self.source, self.date) if not result: session = db.session session.add(self) session.commit() else: session = db.session self.id = result.id session.add(result) session.commit()