더북(TheBook)

그러면 그림 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 문을 실행해 보겠습니다. 바뀐 종목 코드에 따라 매수가와 수량도 함께 고쳤습니다.

db_helper.py

(...)
cur.execute(sql, ('007700', 35000, 30, '20201222', 'today'))
(...)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.