우선 mysql에서 table을 만들어 주었습니다.
기본키는 티커와 날짜 두개의 다중 기본키를 사용하였습니다.
create table price (
ticker varchar(6) not null,
day1 varchar(8) not null,
open1 int,
high int,
low int,
end1 int,
volume int,
mount Long,
rate float,
name1 varchar(20),
primary key(ticker,day1)
)
일정기간동안의 주가 데이터를 pykrx로 가져와서 전처리합니다
def getStockPrice(self,start_day, end_day):
print("start get_stock_price")
def str_day(d):
return d.strftime('%Y%m%d')
def getStock(day): # 해당일의 모든 종목의 종가,저가,고가등등을 가져오고 날짜를 추가
ddf = stock.get_market_ohlcv(day, market="ALL").reset_index()
ddf["day"] = day
return ddf
# 입력한 기간동안에 개장일을 구하기
tmpDays = stock.get_market_ohlcv(start_day, end_day, "005930")
days = list(map(str_day, tmpDays.index.to_list()))
if len(days)<=1:
print(start_day,end_day)
print("업데이트할 내용이 없습니다 ")
return -1
#멀티 프로세싱을 이용하여 구한 값들을 다 합치기 시간 단축
df = pd.concat(parmap.map(getStock, days, pm_pbar=True, pm_processes='8'))
df["회사명"]=""
def tickerChangeName(code):
name = stock.get_market_ticker_name(code)
return name
tickerList = df.groupby("티커").size().index
for ticker in tqdm(tickerList):
name = tickerChangeName(ticker)
df.loc[df["티커"] == ticker, "회사명"] = name
print(df)
if os.path.isfile("csvFile/stock2019.csv")==False:
df.to_csv("csvFile/stock2019.csv", mode='w')
return 0
else:
preDf = pd.read_csv("csvFile/stock2019.csv", index_col=0)
df = pd.concat([preDf,df])
df.to_csv("csvFile/stock2019.csv", mode='w')
return 0
ticker open1 high low ... mount rate day1 name1
0 060310 2280 2280 2160 ... 53853515 -1.13 20190102 3S
1 095570 4530 4605 4445 ... 179748930 0.55 20190102 AJ네트웍스
2 068400 12750 12950 12250 ... 2723516050 0.41 20190102 SK렌터카
3 006840 53900 54000 51300 ... 1248346800 -3.89 20190102 AK홀딩스
4 054620 4225 4290 4155 ... 99013735 -0.36 20190102 APS홀딩스
to_sql을 이용해서 한번에 df을 mysql에 업로드 합니다
주의점 df 컬럼과 table의 컬럼명이 같아야함
import pandas as pd
import pymysql
from sqlalchemy import create_engine
# https://go-for-data.tistory.com/entry/01SQLBulkInsert
df = pd.read_csv("csvFile/stock2019.csv",index_col=0)
df.columns = ["ticker","open1","high","low","end1","volume","mount","rate","day1","name1"]
#중복된 값들 제거
df.drop_duplicates(['ticker',"day1"], keep='first',inplace=True)
print(df.shape)
engine = create_engine("mysql+pymysql://root:"+"비번"+"@localhost/db명", encoding='utf-8')
df.to_sql(name ='price', con = engine, if_exists='append', index=False)
'sql' 카테고리의 다른 글
| mysql 터미널 접속 및 사용법 (0) | 2022.07.19 |
|---|---|
| 주식 데이터로 sql 연습 (section 2) (0) | 2022.07.17 |
| python 상장 기업 정보 mysql에 insert하기 (0) | 2022.07.16 |
| 주식 데이터로 sql 연습 (section 1) (0) | 2022.07.13 |
| 파이썬 dataframe mysql insert하기 (0) | 2022.07.13 |