from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint from commons.models.mixin.calculator import CalculatorMixin from commons.models.model import Model from core.extensions import db class Oil(db.Model, Model, CalculatorMixin): __tablename__ = 'OIL' id = Column('ID', Integer, primary_key=True) name = Column('NAME', String(128), default='', comment='名称') price = Column('PRICE', Numeric(16, 4), default=0, comment='价格') date = Column('DATE', Date, comment='日期') __table_args__ = ( UniqueConstraint(name, date, name='Idx_key'), {'comment': '成品油'}, ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @classmethod def get_items(cls, year, month, name_in): query = cls.query query = cls.query_by_month(query, year, month) query = query.filter(cls.name.in_(name_in)) query = query.order_by(cls.date) result = query.all() return result @classmethod def get_by_key(cls, name, date): query = cls.query query = query.filter(cls.name == name).filter(cls.date == date) return query.one_or_none() def upsert(self): result = self.get_by_key(self.name, 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()