본문 바로가기

파이썬으로 로또 1등 도전기

13일차) 로또룰을 적용해서 당첨 번호 만들어서 저장까지!!!

import pymysql

# MySQL 연결을 위한 전역 변수
connection = None

def connect_to_db():
    global connection
    if connection is None:
        connection = pymysql.connect(
            host='localhost',
            user='root',
            password='your password',
            database='lotto_db',
        )

안녕하세요, 여러분! 오늘은 Python을 사용해서 로또 번호를 자동으로 추첨하고, 그 결과를 MySQL 데이터베이스에 저장하는 간단한 프로그램을 만들어 보겠습니다. 이 프로그램을 통해 매주 토요일마다 로또를 즐기는 재미를 더해 보세요! 🎉

## 프로젝트 개요

이번 프로젝트의 목표는 다음과 같습니다:

1. 로또 번호 추첨의 기본 규칙을 MySQL에서 불러옵니다.
2. 현재 회차의 로또 당첨 번호를 공공 API를 통해 가져옵니다.
3. 불러온 당첨 번호에 기반하여 제외할 번호를 설정합니다.
4. 제외된 번호를 바탕으로 새로운 로또 번호를 생성합니다.
5. 생성된 번호를 데이터베이스에 저장합니다.

준비가 되셨나요? 그럼 이제 코드와 함께 단계별로 살펴보겠습니다!

## 1단계: 데이터베이스 연결

첫 번째 단계는 MySQL 데이터베이스에 연결하는 것입니다. 아래 코드를 사용하여 데이터베이스에 연결할 수 있습니다:



위 코드에서 `connect_to_db` 함수는 데이터베이스 연결을 관리합니다. 이미 연결이 되어 있다면, 다시 연결하지 않도록 합니다.

## 2단계: 로또 원칙 가져오기

이제 로또의 규칙을 데이터베이스에서 가져올 차례입니다. 아래 코드를 통해 원칙을 읽어옵니다:

def get_lotto_rules_from_db():
    connect_to_db()  # DB 연결 설정
    
    try:
        with connection.cursor() as cursor:
            sql = "SELECT id, condition_type, order_sequence, bonus_included, lotto_round, pre_lotto_round FROM lotto_rules WHERE id = 1"
            cursor.execute(sql)
            result = cursor.fetchone()
            if result:
                lotto_rule_id, condition_type, order_sequence, bonus_included, lotto_round, pre_lotto_round = result
                exclude_indices = [int(i) - 1 for i in order_sequence.split(',')]
                exclude_bonus = bonus_included == 1
                
                return lotto_rule_id, condition_type, exclude_indices, exclude_bonus, lotto_round, pre_lotto_round
            else:
                return None, None, None, None, None, None
    finally:
        pass



이 함수는 로또 규칙을 데이터베이스에서 읽어옵니다. `order_sequence`를 통해 제외할 번호의 인덱스를 구하고, 보너스 번호를 제외할지 여부도 설정합니다.

## 3단계: 당첨 번호 가져오기

이제 로또 당첨 번호를 API를 통해 가져오는 코드입니다. 아래 함수를 사용해보세요:

def get_lotto_winning_numbers(draw_no):
    url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={draw_no}"
    response = requests.get(url)
    data = response.json()
    
    if data["returnValue"] == "success":
        winning_numbers = [data[f"drwtNo{i}"] for i in range(1, 7)]
        bonus_number = data["bnusNo"]
        return winning_numbers, bonus_number
    else:
        return None, None



여기서는 `draw_no`에 해당하는 로또 번호를 가져옵니다. API에서 데이터를 불러오고, 성공적으로 가져오면 당첨 번호와 보너스 번호를 반환합니다.

## 4단계: 제외할 번호 설정하기

가져온 당첨 번호에서 제외할 번호를 설정합니다. 아래 코드를 통해 진행할 수 있습니다:

def get_excluded_numbers(latest_draw_no, lotto_round, pre_lotto_round, exclude_indices, exclude_bonus):
    if lotto_round is not None:
        target_draw_no = lotto_round
    elif pre_lotto_round is not None:
        target_draw_no = latest_draw_no - pre_lotto_round
    else:
        return None, None, None

    target_numbers, target_bonus = get_lotto_winning_numbers(target_draw_no)

    if target_numbers:
        excluded_numbers = [target_numbers[i] for i in exclude_indices]
        
        if exclude_bonus:
            excluded_numbers.append(target_bonus)
        
        excluded_numbers.sort()
        
        return excluded_numbers, target_numbers, target_bonus
    else:
        return None, None, None



여기서 제외할 번호를 결정합니다. 로또 원칙에 따라 번호를 선택하여 정렬한 후 반환합니다.

## 5단계: 로또 번호 생성 및 저장

마지막으로, 제외된 번호를 기반으로 새로운 로또 번호를 생성하고, 이를 데이터베이스에 저장하는 코드를 작성해볼까요:

def generate_lotto_numbers(excluded_numbers):
    all_numbers = set(range(1, 46))
    excluded_set = set(excluded_numbers)
    
    available_numbers = list(all_numbers - excluded_set)
    
    lotto_numbers = random.sample(available_numbers, 6)
    
    return sorted(lotto_numbers)

# 로또 번호 생성 및 DB 저장
for i in range(10):
    lotto_numbers = generate_lotto_numbers(excluded_numbers)
    print(f"세트 {i + 1}의 당첨 번호: {lotto_numbers}")
    
    insert_lotto_lucky_numbers(latest_draw_no, lotto_numbers, None, 'N')



여기서 10세트의 로또 번호를 생성하고, 이를 데이터베이스에 저장합니다. `insert_lotto_lucky_numbers` 함수를 통해 번호를 데이터베이스에 추가하게 됩니다.

 



## 결론

이렇게 Python과 MySQL을 활용하여 로또 번호를 자동으로 추첨하고, 그 결과를 데이터베이스에 저장하는 프로그램을 만들었습니다! 이 프로그램은 매주 새로운 로또 번호를 생성하는 데 유용할 것입니다. 여러분도 이 코드를 활용해 로또의 재미를 더해보세요! 💡

다음에는 더 많은 프로젝트와 함께 돌아오겠습니다. 감사합니다! 😊