이번 포스팅에서는 데이터프레임(DataFrame)에 있는 데이터를 SQLite 테이블에 넣는 방법에 대해 설명드리겠습니다.

 

SQLite는 서버없이 사용하는 가벼운 DB 엔진이고 Data Base가 파일로 구성되어 있습니다.

복잡하지 않고 가벼운 DB시스템을 원한다면 SQLite는 적절한 선택이 될 것입니다.

 

SQLite 테이블에 Insert할 데이터프레임 정보는 다음을 참고하시기 바랍니다. 

 

2020/12/06 - [프로그래밍/┗크롤링과 스크레이핑] - [Python] 웹 페이지에 있는 table 읽어서 데이터프레임(DataFrame)에 담기

 

[Python] 웹 페이지에 있는 table 읽어서 데이터프레임(DataFrame)에 담기

이번 포스팅에서는 웹 페이지에 있는 table 태그를 읽어서 데이터프레임(DataFrame)에 담는 과정을 설명드리겠습니다. 네이버 금융에서 시간별 시세(분봉)를 가져와 보도록 하겠습니다. 삼성전자(005

grand-unified-engine.tistory.com

SQLite를 사용하기 위해 DB Browser for SQLite를 설치합니다. 경로는 다음과 같습니다.

 

DB Browser for SQLite (sqlitebrowser.org)

 

DB Browser for SQLite

DB Browser for SQLite The Official home of the DB Browser for SQLite Screenshot What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite. DB4S is for users and dev

sqlitebrowser.org

설치 후 프로그램을 열면 아주 쉬운 인터페이스로 구성되어 있음을 알 수 있습니다.

 

1. 먼저 새 데이터베이스를 생성합니다. 새 데이터베이스를 클릭합니다.
   다음과 같이 데이터베이스가 파일로 저장되는 것을 확인할 수 있습니다.

2. 원하는 데이터베이스 이름을 지정하고 저장을 클릭합니다.

 

3. 테이블을 생성하기 위해 테이블 생성하기 버튼을 클릭합니다.

   다음과 같이 테이블 정의 팝업이 뜹니다.

"필드 추가" 버튼을 눌러 필드를 계속 추가할 수 있고 아래쪽에 스크립트가 자동생성되는 것을 볼 수 있습니다.

확인 버튼을 눌러 테이블을 생성합니다.

 


이제 파이썬 코딩을 해보겠습니다.

 

우선 DataFrame에 있는 데이터를 print해서 확인하는 것까지 해보겠습니다.

 

소스는 다음과 같습니다.

 

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import datetime

url = 'https://finance.naver.com/item/sise_time.nhn?code=005930&thistime=20201210153000'
df = pd.DataFrame()
with urlopen(url) as doc:
    html = BeautifulSoup(doc, 'lxml')
    pgrr = html.find('td', class_='pgRR')
    s = str(pgrr.a['href']).split('=')
    last_page = s[-1]

for page in range(1, int(last_page)+1):
    page_url = '{}&page={}'.format(url, page)
    df = df.append(pd.read_html(page_url, header=0)[0])

df = df.dropna()
df = df[['체결시각', '체결가', '거래량', '변동량']]
df[['체결가', '거래량', '변동량']] = df[['체결가', '거래량', '변동량']].astype(int)

df.insert(len(df.columns), "코드", '005930')

today = datetime.datetime.today().strftime('%Y-%m-%d')
for row in df.itertuples():
    print("코드 : {}, 체결시각: {}, 체결가: {}, 거래량: {}, 변동량: {}".format(row[5], today + " " + row[1] + ":00", row[2], row[3], row[4]))

 

결과는 다음과 같습니다.

데이터가 잘 들어가 있으니 SQLite 테이블에 Insert 하겠습니다.

 

먼저 sqlite3를 import합니다. 파이썬에 내장되어 있어 바로 import되는 것을 볼 수 있습니다.

 

아래 코드를 추가하고 실행합니다.

 

con = sqlite3.connect("D:/PycharmProject_32bit/Kiwoom/sqlite/stock_jarvis.db")
cur = con.cursor()

for row in df.itertuples():
    sql = "insert into minute_price(code, time, close, volume, diff) values (?, ?, ?, ?, ?)"
    cur.execute(sql, (row[5], row[1], row[2], row[3], row[4]))
con.commit()

 

먼저 DB Browser for SQLite를 이용해서 데이터가 잘 들어갔는지 확인해 보도록 하겠습니다.

파이썬으로도 확인해보겠습니다.

 

cur.execute("select * from minute_price")
 
# 데이타 Fetch
rows = cur.fetchall()
for row in rows:
    print(row)
 
# Connection 닫기
con.close()

튜플 형태로 데이터를 반환하는 것을 확인할 수 있습니다.

 

지금까지 DataFrame 데이터를 SQLite 테이블에 Insert 하는 과정을 살펴봤습니다.

 

 

+ Recent posts