py_scripts/lottery.py

75 lines
3.2 KiB
Python

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://test: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:{draw_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