from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint from commons.models.mixin.base import BaseModelMixin from commons.models.model import Model from core.extensions import db class DataFujian(db.Model, Model, BaseModelMixin): __tablename__ = 'DATA_FUJIAN' id = Column('ID', Integer, primary_key=True) number = Column('NUMBER', String(128), default='', comment='编码') name = Column('NAME', String(128), default='', comment='名称') spec = Column('SPEC', String(128), default='', comment='规格') unit = Column('UNIT', String(128), default='', comment='单位') price_without_tax = Column('PRICE_WITHOUT_TAX', Numeric(16, 4), default=0, comment='除价格') price = Column('PRICE', Numeric(16, 4), default=0, comment='含税价') category = Column('CATEGORY', String(128), default='', comment='分类') year = Column('YEAR', Integer, default=0, comment='年份') month = Column('MONTH', Integer, default=0, comment='月份') city = Column('CITY', String(128), default='', comment='地市') date = Column('DATE', Date, comment='日期') __table_args__ = ( UniqueConstraint(year, month, city, name, spec, name='Idx_key'), {'comment': '福建数据'}, ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def find_by_key(self): query = DataFujian.query query = query.filter(DataFujian.year == self.year) query = query.filter(DataFujian.month == self.month) query = query.filter(DataFujian.city == self.city) query = query.filter(DataFujian.name == self.name) query = query.filter(DataFujian.spec == self.spec) result = query.one_or_none() return result @classmethod def get_query(cls, year=None, month=None, name=None, spec=None, name_in=None, region='福州', number=None): query = cls.query if year and month: query = query.filter(cls.year == year) query = query.filter(cls.month == month) if number: query = query.filter(cls.number == number) if name: query = query.filter(cls.name == name) if name_in: query = query.filter(cls.name.in_(name_in)) if spec: query = query.filter(cls.spec.like(f'%{spec}%')) if region: query = query.filter(cls.city.like(f'%{region}%')) return query