PYTHON/AUTO TRADE SYSTEM

[자동 매매 시스템 구축하기] 차트 데이터 조회 여부 (3) - DB 자동 생성

  • -

 

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

지난 포스팅에서 대략적으로 다루긴 했었으나 이번 포스팅에서는 함수를 제작함으로써, 그 함수 내에 제작하고자 하는 데이터베이스 이름만 입력하면 자동으로 데이터베이스가 존재하는지 확인하고 없다면 생성하도록 하는 절차를 구축하고자 한다. 

 

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

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키 위에 있는 `을 사용하게 되면 다음과 같은 오류가 발생한다. 진짜 진짜 주의해야 한다. `과 ', 여기서 보면 구분될지는 몰라도 파이썬 내에 직접 입력해놓고 보면 뭐를 사용한 것인지 잘 모른다.


728x90

 

 

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

본인의 경우 check_db라는 함수는 manage_db.py라는 파일에 저장되어 있고, Open API 코드는 main.py이라는 파일에 저장되어 있다. 그렇다면 이제 main.py이라는 파일에서 manage_db.py 파일 내의 check_db 함수를 사용해보도록 하자.

import manage_db

manage_db.check_db('just_test')

class tradesystem():
	# Open API 관련 코드들
	~~~~~~

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

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

[DB 관리] just_test DB가 이미 존재합니다.

 

 

 


728x90
반응형
Contents

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

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