Page 23 -
P. 23
Note SQL에서 종목 코드는 ‘005930’처럼 따옴표를 사용하여 문자로 만들고 매수가는 따옴표 없이 숫자로
70000을 사용하는 이유는 balance 테이블을 생성할 때 종목 코드(code) 타입을 문자형, 매수가(bid_price)는 숫
자형으로 정의했기 때문입니다.
코드를 실행하면 SQL이 정상적으로 수행되는 것을 알 수 있지만 결과를 직접 확인해 보고자 조금
전에 설치한 DB Browser로 다시 돌아가 보겠습니다. 이전에 balance 테이블 생성을 확인하며
5
DB Browser를 아직 실행해 놓은 상태라면 새로고침( F5 )을 눌러야 변화를 확인할 수 있습니다.
그림 5-17 DB Browser에서 테이블 조회 프로젝트
그러면 그림 5-17과 같이 테이블에 데이터가 잘 저장되었음을 알 수 있었습니다. 여기서 파이참
에서 실행했던 동일한 insert SQL 코드를 한 번 더 실행하면 어떻게 될까요?
Traceback (most recent call last):
File "C:/Users/82103/PycharmProjects/SystemTrading/util/db_helper.py", line 15, in
<module>
cur.execute(sql, ('005930', 70000, 10, '20201222', 'today'))
sqlite3.IntegrityError: UNIQUE constraint failed: balance.code
이처럼 동일한 insert 문을 다시 실행하면 에러가 발생하는 것을 알 수 있습니다. 에러가 발생하
는 이유는 유일함이라는 제약(UNIQUE constraint)이 있기 때문입니다. 무슨 말이냐면 insert 문
은 종목 코드 ‘005930’인 데이터를 balance 테이블에 하나 더 삽입하는 과정을 거칩니다. 하지만
우리가 balance 테이블을 생성할 때 code 열을 다른 데이터들과 구분할 수 있는 유일한 기본 키
(PRIMARY KEY)로 설정했기 때문에 데이터 중복이 있을 수 없습니다. 중복된 종목 코드를 사용할
수 없어 에러가 발생하는 것입니다.
그러면 종목 코드를 바꾸어 insert 문을 실행해 보겠습니다. 바뀐 종목 코드에 따라 매수가와 수
량도 함께 고쳤습니다.
311
주식매매_05.indd 311 2021-09-30 오후 3:20:44