check_table_exist 함수 내부를 하나씩 살펴보겠습니다. 이 함수는 데이터베이스 이름과 테이블 이름을 매개변수로 전달받아 데이터베이스에 테이블이 있는지 확인하는 역할을 합니다. 처음은 with 문을 이용하여 데이터베이스에 연결합니다. 아직 프로젝트의 .db 파일이 없으니 코드가 실행되면 매개변수로 전달받은 데이터베이스 이름으로 .db 파일을 만들게 됩니다.
이후 등장하는 sql을 보면 sqlite_master라는 테이블에서 우리가 조회할 테이블 이름이 있는지 확인합니다. sqlite_master 테이블은 우리가 이미 만들어 둔 테이블이 아니라 데이터베이스가 처음 생성되면 자동으로 생성되는 메타데이터(데이터들의 데이터) 테이블입니다. 즉, 데이터베이스에서 테이블을 생성하면 테이블 정보가 자동으로 sqlite_master 테이블에 저장되므로, 확인하고 싶은 테이블이 있다면 sqlite_master 테이블에서 sql을 이용하여 조회하면 됩니다.
그다음에 나오는 cur.fetchall()은 조회한 데이터 개수가 0보다 큰지 확인하여 0보다 크면 데이터베이스에 해당 테이블이 있다는 의미입니다. 반대로 조회되는 개수가 0이라면 테이블이 없다는 것을 알 수 있습니다.
다시 RSIStrategy.py 파일로 돌아가서 check_table_exist 함수로 check_and_get_universe를 완성해 보겠습니다.
RSIStrategy.py
(...)
def check_and_get_universe(self): ------ 유니버스가 있는지 확인하고 없으면 생성하는 함수
if not check_table_exist(self.strategy_name, 'universe'):
universe_list = get_universe()
print(universe_list)