본문 바로가기

Python

파이썬 _ 주가 일봉 데이터 저장 프로그램 코드 및 파일

주가 일봉 데이터 저장 프로그램 코드 및 파일

 

주가 일봉 데이터 저장 프로그램 코드 및 파일

< 주가 일봉 데이터 저장 프로그램 > "주가 일봉 데이터 저장 프로그램"은 종목의 일봉 데이터('시가', '고가', '저가', '종가', '거래량) 를 DB 또는 엑셀에 저장한다. 물론 일봉 데이터 기간은 종목의 상장 이후..

programmingfbf7290.tistory.com

 

Programming님이 올려주신 파일로 나는 DB를 사용할 수 없었다. 

 

왜? 

 

StockDB.py에 쓰여진 코드에서 자신이 MySQL 설치시 설정한 비밀번호와 다르기 때문이다. 

 

 

from sqlalchemy import create_engine
import pymysql
pymysql.install_as_MySQLdb()
import pandas as pd

class StockDB():
    def init(self, password):
        if self._create_database(password) is False:
            return False
        self.engine = create_engine("mysql+mysqldb://root:"+password+"@localhost/stock", encoding='utf-8')
        self.conn = pymysql.connect(host='localhost', user='root', password=password, db='stock', charset='utf8')
        self.cursor = self.conn.cursor()
        return True

    def _create_database(self,password):
        try:
            conn = pymysql.connect(host='localhost', user='root', password=password, charset='utf8')
            cursor = conn.cursor()
            sql = 'SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = \'stock\''
            result = cursor.execute(sql)

            if result == 0:
                sql = 'CREATE DATABASE stock'
                cursor.execute(sql)
                conn.commit()
        except:
            return False
        return True


    def close(self):
        self.conn.close()

    def select_max_date(self,table_name):
        sql = 'select max(Date) from ' + table_name
        self.cursor.execute(sql)
        result = self.cursor.fetchone()
        return result[0]

    def insert_chart(self,data, table_name):
        data.to_sql(name=table_name, con=self.engine, if_exists='append')
        self.conn.commit()

    def create_table(self,table_name):
        sql = 'SHOW TABLES LIKE \'' + table_name + '\''
        result = self.cursor.execute(sql)
        if result == 0:
            sql = 'create table ' + table_name + '(Date date primary key,Open Decimal,High Decimal,Low Decimal,Close Decimal, Volume Decimal);'
            self.cursor.execute(sql)
            self.conn.commit()

 

따라서 Programming님의 위의 코드 중에서 password 부분을 내가 MySQL에 설정한 1234로 바꾸자

코드는 아래와 같다. 

 

 

from sqlalchemy import create_engine
import pymysql
pymysql.install_as_MySQLdb()

class StockDB():
    def init(self, password):
        if self._create_database(password) is False:
            return False
        self.engine = create_engine("mysql+mysqldb://root:"+password+"@localhost/stock", encoding='utf-8')
        self.conn = pymysql.connect(host='localhost', user='root', password='1234', db='stock', charset='utf8')
        self.cursor = self.conn.cursor()
        return True

    def _create_database(self,password):
        try:
            conn = pymysql.connect(host='localhost', user='root', password='1234', charset='utf8')
            cursor = conn.cursor()
            sql = 'SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = \'stock\''
            result = cursor.execute(sql)

            if result == 0:
                sql = 'CREATE DATABASE stock'
                cursor.execute(sql)
                conn.commit()
        except:
            return False
        return True


    def close(self):
        self.conn.close()

    def select_max_date(self,table_name):
        sql = 'select max(Date) from ' + table_name
        self.cursor.execute(sql)
        result = self.cursor.fetchone()
        return result[0]

    def insert_chart(self,data, table_name):
        data.to_sql(name=table_name, con=self.engine, if_exists='append')
        self.conn.commit()

    def create_table(self,table_name):
        sql = 'SHOW TABLES LIKE \'' + table_name + '\''
        result = self.cursor.execute(sql)
        if result == 0:
            sql = 'create table ' + table_name + '(Date date primary key,Open Decimal,High Decimal,Low Decimal,Close Decimal, Volume Decimal);'
            self.cursor.execute(sql)
            self.conn.commit()

 

바뀐 건 비밀번호 밖에 없다. 그럼에도 전체 코드를 다 입력한 것은 나같은 초보자에게 어떤 부분을 어떻게 바꾸라는 것 자체가 쉽지 않기 때문이다.