init
This commit is contained in:
50
web/commons/models/asphalt_domestic.py
Normal file
50
web/commons/models/asphalt_domestic.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from sqlalchemy import Column, Integer, String, Numeric, Date, UniqueConstraint, func
|
||||
|
||||
from commons.models.mixin.calculator import CalculatorMixin
|
||||
from core.extensions import db
|
||||
|
||||
|
||||
class AsphaltDomestic(db.Model, CalculatorMixin):
|
||||
__tablename__ = 'ASPHALT_DOMESTIC'
|
||||
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='日期')
|
||||
from_ = Column('FROM', Date, comment='数据来源')
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint(name, date, from_, name='Idx_key'),
|
||||
{'comment': '国产沥青'},
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def get_by_key(cls, name, date, from_):
|
||||
query = cls.query
|
||||
query = query.filter(
|
||||
cls.name == name,
|
||||
cls.date == date,
|
||||
cls.from_ == from_,
|
||||
)
|
||||
return query.one_or_none()
|
||||
|
||||
@classmethod
|
||||
def get_items(cls, date, name_in):
|
||||
query = cls.query
|
||||
query = query.filter(cls.date == date)
|
||||
query = query.filter(cls.name.in_(name_in))
|
||||
query = query.with_entities(cls.name, func.avg(cls.price))
|
||||
query = query.group_by(cls.name)
|
||||
result = query.all()
|
||||
return result
|
||||
|
||||
def upsert(self):
|
||||
result = self.get_by_key(self.name, self.date, self.from_)
|
||||
if not result:
|
||||
session = db.session
|
||||
session.add(self)
|
||||
session.commit()
|
||||
else:
|
||||
session = db.session
|
||||
self.id = result.id
|
||||
session.add(result)
|
||||
session.commit()
|
Reference in New Issue
Block a user