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
   18   19   20   21   22   23   24   25