본문 바로가기

IT 관련/개발 자료

파이썬으로 데이터베이스 다뤄보기! 로또 API로 받은 데이터를 내 데이터베이스 안에 쏘옥~ (python & SQLite)

반응형

2020/03/31 - [IT 관련/개발 자료] - python 파이썬 으로 로또 당첨번호 데이터 가져오기

 

python 파이썬 으로 로또 당첨번호 데이터 가져오기

오늘은 #python #파이썬 이라는 언어로 #로또 의 #API 를 사용해서 #당첨번호 를 한번 가져와보도록 하겠습니다~ #로또API 의 정보와 #파이썬 개발을 위한 #환경설정 은 아래 포스팅에서 확인해주세요~ 2020/03/26..

hsnation.tistory.com

 

예고해 드린대로 위의 전편에 이어서 이번에는 #python #파이썬을 이용해 #데이터 를 저장하는 방법을 포스팅해보겠습니다.

#python 에는 기본 모듈로 #SQLite 라는 #database #데이터베이스 가 내장되어 사용 가능하다고 하네요.

SQLite 이름 보시면 눈치채실 수 있겠죠? 가벼운 버전의 #SQL 엔진이긴하지만, 강력한 기능을 제공하여 많은

서비스에서 이용 중이라고 해요~ 저도 처음 써보는 거긴 합니다^^;

SQLite

 

#DB 를 다루는 방법은 여러가지가 있겠지만, 이번에는 #코딩 #coding 으로 생성해서 사용하는걸로 해볼께요.

우선 어제 적었던 코드를 실행하면 #JSON 형식으로 데이터가 통짜로 넘어오고 있습니다.

{'totSellamnt': 3681782000, 'returnValue': 'success', 
'drwNoDate': '2002-12-07', 'firstWinamnt': 0, 'drwtNo6': 40, 
'drwtNo4': 33, 'firstPrzwnerCo': 0, 'drwtNo5': 37, 'bnusNo': 16, 
'firstAccumamnt': 863604600, 'drwNo': 1, 'drwtNo2': 23, 
'drwtNo3': 29, 'drwtNo1': 10}

얘를 다루기 위해선 먼저 #필드 #field 별로 데이터를 나눠야 합니다.

def DataSave(jsResult):
    drwNo = jsResult["drwNo"]                   # 회차
    drwNoDate = jsResult["drwNoDate"]           # 당첨일
    drwtNo1 = jsResult["drwtNo1"]               # 당첨번호1
    drwtNo2 = jsResult["drwtNo2"]               # 당첨번호2
    drwtNo3 = jsResult["drwtNo3"]               # 당첨번호3
    drwtNo4 = jsResult["drwtNo4"]               # 당첨번호4
    drwtNo5 = jsResult["drwtNo5"]               # 당첨번호5
    drwtNo6 = jsResult["drwtNo6"]               # 당첨번호6
    bnusNo = jsResult["bnusNo"]                 # 보너스번호
    totSellamnt = jsResult["totSellamnt"]       # 누적당첨금
    firstWinamnt = jsResult["firstWinamnt"]     # 1등당첨금
    firstPrzwnerCo = jsResult["firstPrzwnerCo"] # 1등당첨인원
    firstAccumamnt = jsResult["firstAccumamnt"] # 1등당첨금총액
    returnValue = jsResult["returnValue"]       # 실행결과

    print(str(drwNo) + "|" + drwNoDate + str(drwtNo1) + "|" + 
    str(drwtNo2) + "|" + str(drwtNo3) + "|" + str(drwtNo4) + "|" + 
    str(drwtNo5) + "|" + str(drwtNo6) + "|" + str(bnusNo) + "|" + 
    str(totSellamnt) + "|" + str(firstWinamnt) + "|" + str(firstPrzwnerCo) + 
    "|" + str(firstAccumamnt))

데이터 처리를 하는 #함수 DataSave 에 먼저 필드 쪼개는 코드를 넣고 결과를 한번 보시죠.

"|" 문자를 기준으로 분리한 데이터들을 나열해봤는데요. 얘들을 다 각각의 변수에 넣어 저장했습니다.

분리된 데이터

이제 남은건...DB에 저장하는게 남았군요. 위의  소스에다가 아래 코드를 덧붙여 보겠습니다.

conn = sqlite3.connect("lotto.db")
c = conn.cursor()

c.execute('''CREATE TABLE IF NOT EXISTS LottoNo (drwNo integer, drwNoDate text, drwtNo1 integer, 
            drwtNo2 integer, drwtNo3 integer, drwtNo4 integer, drwtNo5 integer, drwtNo6 integer, 
            bnusNo integer, totSellamnt integer, firstWinamnt integer, firstPrzwerCo integer, 
            firstAccumamnt integer)''')

c.execute("INSERT INTO LottoNo VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
          (drwNo,drwNoDate,drwtNo1,drwtNo2,drwtNo3,drwtNo4,drwtNo5,drwtNo6,bnusNo,totSellamnt,
           firstWinamnt,firstPrzwnerCo,firstAccumamnt))

conn.commit()

conn.close()

먼저 lotto.db 라는 데이터베이스 파일에 접근하도록 하고, 이 파일과의 연결을 설정합니다.

그리고 CREATE 문을 통해 LottoNo 라는 테이블이 있으면 넘어가고, 없으면 생성하는 문장을 써줬어요.

(이 작업은 간단하게 그냥 코드로 했는데, 전에 소개시켜드렸던 #DBeaver 같은 툴을 이용해서 할 수도 있답니다.)

요거까지 하고나선...#IDE 의 #콘솔 에 출력되는 결과는 똑같아요!

 

전체 소스 코드부터 보여드릴께요. (펼쳐보기^^)

더보기
import requests
import json
import sqlite3


def DataSave(jsResult):
    drwNo = jsResult["drwNo"]                   # 회차
    drwNoDate = jsResult["drwNoDate"]           # 당첨일
    drwtNo1 = jsResult["drwtNo1"]               # 당첨번호1
    drwtNo2 = jsResult["drwtNo2"]               # 당첨번호2
    drwtNo3 = jsResult["drwtNo3"]               # 당첨번호3
    drwtNo4 = jsResult["drwtNo4"]               # 당첨번호4
    drwtNo5 = jsResult["drwtNo5"]               # 당첨번호5
    drwtNo6 = jsResult["drwtNo6"]               # 당첨번호6
    bnusNo = jsResult["bnusNo"]                 # 보너스번호
    totSellamnt = jsResult["totSellamnt"]       # 누적당첨금
    firstWinamnt = jsResult["firstWinamnt"]     # 1등당첨금
    firstPrzwnerCo = jsResult["firstPrzwnerCo"] # 1등당첨인원
    firstAccumamnt = jsResult["firstAccumamnt"] # 1등당첨금총액
    returnValue = jsResult["returnValue"]       # 실행결과

    conn = sqlite3.connect("lotto.db")
    c = conn.cursor()

    c.execute('''CREATE TABLE IF NOT EXISTS LottoNo (drwNo integer, drwNoDate text, drwtNo1 integer, 
                drwtNo2 integer, drwtNo3 integer, drwtNo4 integer, drwtNo5 integer, drwtNo6 integer, 
                bnusNo integer, totSellamnt integer, firstWinamnt integer, firstPrzwerCo integer, 
                firstAccumamnt integer)''')

    c.execute("INSERT INTO LottoNo VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
              (drwNo,drwNoDate,drwtNo1,drwtNo2,drwtNo3,drwtNo4,drwtNo5,drwtNo6,bnusNo,totSellamnt,
               firstWinamnt,firstPrzwnerCo,firstAccumamnt))

    conn.commit()

    conn.close()

    print(str(drwNo) + "|" + drwNoDate + str(drwtNo1) + "|" + str(drwtNo2) + "|" + str(drwtNo3) + "|" + str(drwtNo4) + "|" + str(drwtNo5) + "|" + str(drwtNo6) + "|" + str(bnusNo) + "|" + str(totSellamnt) + "|" + str(firstWinamnt) + "|" + str(firstPrzwnerCo) + "|" + str(firstAccumamnt))


lotto_url = "https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo="

for i in range(5):
    i += 1
    resp = requests.get(lotto_url + str(i))
    jsResult = resp.json()
    DataSave(jsResult)

 

결과는 DB에 데이터가 제대로 들어갔는가를 확인해야겠는데요. 이거때문에라도.. DBeaver 로 연결하는걸 보여드려야겠네요^^

2020/03/30 - [IT 관련/개발 자료] - DBeaver! 데이터베이스 관리 툴 추천!! 이모든게 다 공짜!!

 

DBeaver! 데이터베이스 관리 툴 추천!! 이모든게 다 공짜!!

오늘은 #DB #Database #데이터베이스 에 접속하고 이를 관리해주는 툴을 소개시켜드리고자 합니다~ 이라는 툴인데요! 전 #DBA 는 아니라, 상세한 퍼포먼스의 비교라던가, 디테일한 기능 지원 등의 영역보단 #운영..

hsnation.tistory.com

 

먼저 DBeaver 를 실행합니다. (굳이 DBeaver 이 아니더라도, SQLite 를 지원하는 툴은 다 상관없어요~)

왼쪽 상단의 새 연결을 선택하세요

SQLite 데이터베이스를 사용하니까 SQLite를 선택

방금 작업하던 파이썬 소스코드와 같은 폴더에 보시면 lotto.db 파일이 보이실꺼에요 이걸 선택~

이제 테이블에서 LottoNo 를 찾으시고 이걸 눌러서 Data 를 보시면~ 아까 #API 를 통해 호출했던 1 ~ 5회차의 데이터가

들어가있는게 확인됩니다!!

이제 데이터베이스에 데이터를 넣는거까지 해봤어요...다음엔 뭐하죠??

반응형