AUTO TRADE/[대신증권] CYBOS PLUS

대신증권 CYBOS PLUS 프로그램 구현 (17) - 데이터베이스 관리 자동화

프로그램 구현 목표

  • 필요한 데이터베이스 목록 정하기
  • 데이터베이스 존재여부 확인하기

자동화라고 해서 뭐 거창한 기능이 있을 것 같지만, 그런 부분은 아니고 단순하게 프로그램이 실행되었을 때 우리가 필요로 하는 데이터베이스가 잘 있는지 확인하고 만약에 필요한 데이터베이스가 없다면 생성해주는 작업을 자동적으로 수행하도록 하는 것이다.

 

필요한 데이터베이스 목록 정하기

기본적으로 사람마다 어떠한 데이터베이스를 사용할지는 모르지만, 적어도 분봉 · 일봉 정도로만 구분해놓고 사용할 것이다. 다만 분봉의 경우에는 3분봉이면 3분봉, 5분봉이면 5분봉과 같이 각 분봉별로 데이터베이스를 생성해두어야 차트 데이터를 종류별로 저장하고 사용할 때에도 간편하게 불러와서 사용할 수 있다. 일단 본인의 경우에는 분봉은 5분봉과 15분봉, 그리고 일봉과 주봉 및 월봉 차트 데이터가 필요했으므로 각각의 데이터베이스 이름을 아래와 같이 설정하고자 한다.
※ MySQL의 테이블 이름은 숫자로 시작할 수 없다. 반드시 영문자로 시작하도록 만들어야 한다.
※ 데이터베이스의 이름은 숫자로 시작할 수 있긴 하지만, 이 경우 쉼표가 아닌 백틱을 사용하여 생성해야 하므로 가능한 지양하자.

  • 5분봉: min5_data
  • 15분봉: min15_data
  • 일봉: day_data
  • 주봉: week_data
  • 월봉: month_data

 

데이터베이스 존재 여부 확인하기

이제 다시 Boss.py 파일로 돌아와서, 프로그램 시작과 동시에 데이터베이스의 존재 여부를 확인하고 존재하지 않는다면 데이터베이스를 생성하도록 하는 기능을 수행할 함수를 만들어주도록 하자. (본인은 `def _load_DB(self):`로 하였다.)

## Boss.py ##
    def _load_DB(self):
        pass

이제 다음으로는 앞서 만들어두었던 필요한 데이터베이스 목록을 리스트 형태로 만들어주도록 하자.
※ Line: 3

## Boss.py ##
    def _load_DB(self):
        DB_list = ['min5_data', 'min15_data', 'day_data', 'week_data', 'month_data']

이제 이 `DB_list`라는 변수를 대상으로 `for`문을 돌면서 각각의 데이터베이스별로 존재 여부를 확인하고 존재하지 않는다면 데이터베이스를 생성하는 작업을 진행할 것이다. 하지만 이 내용을 어디서 많이 봤었을 건데, 이 기능을 이미 만들어두었기 때문이다. 예전에 con_mysql.py 파일에 있는 class check_db() 클래스에 `def _make_db()`라는 이름의 함수를 만들어두었었다. 또한 이 함수는 내부적으로 데이터베이스의 존재 여부(`def _if_exist()`)까지 확인한 후에 데이터베이스를 생성하기 때문에, 우리는 이 함수에 데이터베이스 목록만 전달해주면 되는 것이다.
※ Line: 4, 5

## Boss.py ##
    def _load_DB(self):
        DB_list = ['min5_data', 'min15_data', 'day_data', 'week_data', 'month_data']
        for db in DB_list:
            con_mysql.check_db()._make_db(db)

이제 데이터베이스를 관리할 함수가 완성되었다면, Boss.py 파일의 class cybos 클래스의 초기화 함수 내부에서 계좌 조회 함수의 바로 하단에 이 함수를 추가해주도록 하자.
※ Line: 26

## Boss.py ##
import win32com.client
from pywinauto import application

import con_mysql
from COM import CpSysDib
from COM import CpUtil
from COM import CpTrade
from COM import DsCbo1
import time
from threading import Thread

## GUI ##
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *
from gui import qt_gui

main_ui = uic.loadUiType("main.ui")[0]
class cybos(QMainWindow, main_ui):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self._open_cybosplus()      ## 자동 로그인 함수
        self._load_account()        ## 계좌 조회 함수
        self._load_DB()             ## 데이터베이스 조회 함수

        ## GUI 관련 이벤트 처리 ##
        self.pushButton.clicked.connect(self._GetStockListByMarket)
        self.pushButton_2.clicked.connect(self._day_range)
        self.pushButton_3.clicked.connect(self._len_chart)
        self.comboBox_2.currentIndexChanged.connect(lambda: qt_gui.etc(self).comboBox_2_CIC())

▶ 실행 결과 확인하기

더보기

self.object:CpCybos
[통신결과:1] 서버와의 연결에 성공했습니다.
로그인되어 있습니다.
[주문 오브젝트 초기화 결과] 0(정상)
['15min_data', '3min_data', '5min_data', 'all_data', 'condition', 'information_schema', 'item_data', 'kos_data', 'mysql', 'performance_schema', 'sys', 'test', '테마 정보']
min5_data는 존재하지 않는 데이터베이스입니다.
데이터베이스가 생성되었습니다.
['15min_data', '3min_data', '5min_data', 'all_data', 'condition', 'information_schema', 'item_data', 'kos_data', 'min5_data', 'mysql', 'performance_schema', 'sys', 'test', '테마 정보']
min15_data는 존재하지 않는 데이터베이스입니다.
데이터베이스가 생성되었습니다.
['15min_data', '3min_data', '5min_data', 'all_data', 'condition', 'information_schema', 'item_data', 'kos_data', 'min15_data', 'min5_data', 'mysql', 'performance_schema', 'sys', 'test', '테마 정보']
day_data는 존재하지 않는 데이터베이스입니다.
데이터베이스가 생성되었습니다.
['15min_data', '3min_data', '5min_data', 'all_data', 'condition', 'day_data', 'information_schema', 'item_data', 'kos_data', 'min15_data', 'min5_data', 'mysql', 'performance_schema', 'sys', 'test', '테마 정보']
week_data는 존재하지 않는 데이터베이스입니다.
데이터베이스가 생성되었습니다.
['15min_data', '3min_data', '5min_data', 'all_data', 'condition', 'day_data', 'information_schema', 'item_data', 'kos_data', 'min15_data', 'min5_data', 'mysql', 'performance_schema', 'sys', 'test', 'week_data', '테마 정보']
month_data는 존재하지 않는 데이터베이스입니다.
데이터베이스가 생성되었습니다.

MySQL WorkBench에 잘 생성되었음을 확인할 수 있다.

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.