from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import re from datetime import date from model.pls import PLS from model.plw import PLW from model.sd import SD from model.klb import KLB class Lottery(object): """ Lottery Base Object """ def __init__(self, lottery_type='pls'): self._pat1 = re.compile('开奖日期:(\d+)年(\d+)月(\d+)日.*') self._pat2 = re.compile('开奖日期:(\d+)-(\d+)-(\d+)\s.*') self._lottery_type = lottery_type self.db = self._get_db_session() if lottery_type.lower() == 'pls': self._Model = PLS elif lottery_type.lower() == 'sd': self._Model = SD elif lottery_type.lower() == 'plw': self._Model = PLW elif lottery_type.lower() == 'klb': self._Model = KLB else: raise Exception("未知的lottery_type") def _get_db_session(self): _engine = create_engine("mysql+pymysql://root:123456@localhost/lottery?charset=utf8") _DbSession = sessionmaker(bind=_engine) return _DbSession() def insert(self, draw_issue, draw_date, draw_code, **kwargs): result = self.db.query(self._Model).filter_by(draw_issue=draw_issue).first() if result is None: record = self._Model() record.draw_issue = draw_issue record.draw_code = draw_code m1 = re.match(self._pat1, draw_date) m2 = re.match(self._pat2, draw_date) if m1 or m2 : if m1: record.draw_date = date(int(m1.group(1)), int(m1.group(2)), int(m1.group(3))) else: record.draw_date = date(int(m2.group(1)), int(m2.group(2)), int(m2.group(3))) else: raise Exception(f"issue:{issue}数据写入失败。。。") # 如果是排列3和3D if isinstance(record, PLS) or isinstance(record, SD): record.hundred = draw_code[0] record.ten = draw_code[1] record.one = draw_code[2] record.code_small = len(list(filter(lambda x: True if int(x) < 5 else False, draw_code))) record.code_big = len(list(filter(lambda x: True if int(x) >= 5 else False, draw_code))) record.code_single = len(list(filter(lambda x: True if int(x) % 2 == 1 else False, draw_code))) record.code_double = len(list(filter(lambda x: True if int(x) % 2 == 0 else False, draw_code))) record.draw_code = draw_code record.sum_num = sum(map(int, draw_code)) record.sum_hundred_one = int(draw_code[2]) + int(draw_code[0]) record.sum_hundred_ten = int(draw_code[2]) + int(record.draw_code[1]) record.sum_ten_one = int(record.draw_code[1]) + int(record.draw_code[0]) if len(set(draw_code)) == 2: record.group_type = 3 elif len(set(draw_code)) == 3: record.group_type = 6 else: record.group_type = 1 self.db.add(record) self.db.commit() return record.id else: return result.id