PYTHON/Kiwoom Open API

파이썬 + MySQL, 데이터베이스 자동 처리하기

  • -

이번에는 지난 포스팅에서 파이썬 내에서 MySQL과 연결하는 코드를 살펴봤으니, 이제는 데이터베이스를 자동적으로 구축하는 코드에 대해 제작하고자 한다. 현재 키움증권 Open API와 관련된 코드가 포함되어 있는 파일의 파일명은 posting이고 MySQL과 연동하고 DB를 구축하는 코드는 posting_mysql 파일에 제작되어 있다. 이를 유의하고 보도록 하자.

 

데이터베이스 자동 생성 절차 구축하기

지난 포스팅에서 대략적으로 다루긴 했었으나 이번 포스팅에서는 함수를 제작함으로써, 그 함수 내에 제작하고자 하는 데이터베이스 이름만 입력하면 자동으로 데이터베이스가 존재하는지 확인하고 없다면 생성하도록 하는 절차를 구축하고자 한다. 이 코드를 제작하는 파일 이름은 posting_mysql이고, OpenAPI가 제작되어 있는 파일 이름은 posting이다. 이후에 posting에서 import posting_mysql을 이용할 예정이니 만약 다른 파일 이름으로 사용하고 싶다면 변경한 후에 아래 글을 읽으면 된다. 또한 데이터베이스를 사용하기 위해 mysql을 사용하거나 하는 방법은 지난 포스팅에서 서술하였으니 자세한 설명을 생략하도록 하겠다.

 

파이썬 + MySQL, 파이썬으로 연동하기

지난 포스팅을 통해 설치와 설정하는 방법에 대해 다루었으므로 이번 포스팅에서는 파이썬 내에서 MySQL과 연결하는 방법과 사용방법에 대해 살펴볼 예정이다. 일단 이 MySQL은 앞전에서 다루었던

trustyou.tistory.com

 

일단 생성하거나 또는 존재하는지를 확인하고자 하는 데이터베이스의 이름을 함수의 변수를 통해 받아와야 하기 때문에, 함수는 다음과 같이 제작하면 된다.

def check_db(db_name):

 

그 후에는 이제 받아온 db_name을 바탕으로 해당 데이터베이스가 존재하는지를 확인하는 코드를 작성하면 되는데, 이를 처리하는 방법은 "SHOW DATABASES LIKE '~~'"이다. 

def check_db(db_name):
    cur.execute("SHOW DATABASES LIKE '" + db_name + "'")
    result = cur.fetchall()

 

이를 통해 불러온 후에 len()을 통해 해당 값의 개수를 확인했을 때 0이라는 결과가 나오면 데이터베이스가 존재하지 않는 것이기 때문에 생성해주면 되고, 0이 아니라면 데이터베이스가 존재하는 것이기 때문에 pass를 통해 별도의 처리를 구축하지 않아도 된다. 본인의 경우에는 데이터베이스가 이미 존재한다는 문장을 출력(print문)하도록 하였다.

def check_db(db_name):
    cur.execute("SHOW DATABASES LIKE '" + db_name + "'")
    result = cur.fetchall()

    if len(result) == 0:
        cur.execute("CREATE DATABASE `" + db_name + "`")
        print("[DB 관리] ", db_name, "DB를 생성합니다.")
    else:
        print("[DB 관리]", db_name, "DB가 이미 존재합니다.")

 

이제 이를 사용해볼 예정인데, 앞서 여러 번 이야기했듯이 이 함수는 posting_mysql 안에 있다. 단순 테스트를 위해서라면 posting_mysql 파일 내에 제작되어 있는 함수의 하단 부분에 if __name__ == "__main__": 을 입력한 후 그 아래에 해당 함수의 이름과 입력할 변수를 입력하면 실행되는 것을 확인할 수 있다. 

def check_db(db_name):
    cur.execute("SHOW DATABASES LIKE '" + db_name + "'")
    result = cur.fetchall()

    if len(result) == 0:
        cur.execute("CREATE DATABASE `" + db_name + "`")
        print("[DB 관리] ", db_name, "DB를 생성합니다.")
    else:
        print("[DB 관리]", db_name, "DB가 이미 존재합니다.")

if __name__ == "__main__":
    check_db('just_test')

 

위의 코드를 실행한 결과, [DB 관리]  just_test DB를 생성합니다.라는 결과값이 출력되었다. 이제 자동으로 생성을 했으니 다시 실행해보면 어떤 결과가 나오겠는가? [DB 관리] just_test DB가 이미 존재합니다.라는 결과값이 출력된다는 것을 확인해볼 수 있다.

 

 


MySQL ERROR : You have an error in your SQL syntax; check the manual

그리고 여기서 주의해야 할 점이 하나 있는데, SHOW DATABASES LIKE 'db_name'에서의 '과 CREATE DATABASE `db_name`에서의 `은 다르다. 이전 포스팅에서 설명했듯이 CREATE 또는 DROP 등을 사용할 때에는 tap키 위에 있는 `을 사용해야 하지만, SHOW DATABASES LIKE의 경우에는 엔터 키 위에 있는 '을 사용해야 한다. SHOW DATABASES LIKE에서 tap키 위에 있는 `을 사용하게 되면 다음과 같은 오류가 발생한다. 진짜 진짜 주의해야 한다. `과 ', 여기서 보면 구분될지는 몰라도 파이썬 내에 직접 입력해놓고 보면 뭐를 사용한 것인지 잘 모른다.


 

 

Open API 코드가 제작된 곳에서 해당 함수 사용해보기

여러 번 이야기했듯이 check_db라는 함수는 posting_mysql이라는 파일에 저장되어 있고, Open API 코드는 posting이라는 파일에 저장되어 있다. 그렇다면 이제 posting이라는 파일에서 check_db를 사용해보도록 하자.

import posting_mysql

posting_mysql.check_db('just_test')

class system_trading():
	# Open API 관려 코드들
	~~~~~~

위처럼 파일명.함수이름(변수)의 형태로 사용하면 해당 파일 내에 있는 함수를 사용할 수 있게 된다. 우리가 앞에서 차트데이터를 dataframe 형태로 바꾸는 과정에서 pandas.DataFrame의 형태로 사용한 것도 이와 같은 방식이다. 즉, pandas라는 파일 안에 DataFrame이라는 함수가 있으며 우리는 그 함수에 몇 가지 변수들을 입력해줌으로써 그 결과값을 self.df_day_data라는 값에 저장한 것이다. 

이제 posting(Open API가 제작된 코드)를 실행해보면 로그인이 이루어지기 전에 앞서 다음과 같은 결과물이 동일하게 출력되는 모습을 확인할 수 있다. 

[DB 관리] just_test DB가 이미 존재합니다.
연결되었습니다..
로그인에 성공하였습니다.

 

 

 


728x90
반응형
Contents

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

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