Page 22 -
P. 22

(?, ?, ?, ?, ?)"
                 cur.execute(sql, ('005930', 70000, 10, '20201222', 'today'))
                 print(cur.rowcount)


               테이블 생성에 사용했던 코드는 주석 처리했습니다. 이미 있는 테이블을 다시 생성하려고 하면 테
               이블이 존재한다는 에러가 발생하기 때문입니다. 여기서 수행하는 SQL을 주석 처리하지 않으려

               면 CREATE TABLE을 CREATE TABLE IF NOT EXISTS로 고칩니다. 그러면 테이블이 없을 때만 CREATE
               가 수행되므로 테이블이 있을 때도 문제되지 않습니다. 따라서 SQL에 CREATE TABLE  IF NOT
               EXISTS를 사용한 경우에는 주석 처리를 해제해도 좋습니다.

               그러면 데이터를 삽입(insert)하는 데 사용할 SQL를 살펴보겠습니다.

                 sql = "insert into balance(code, bid_price, quantity, created_at, will_clear_at) values
                       (?, ?, ?, ?, ?)"

               SQL이 insert into로 시작하면 테이블에 데이터를 넣겠다는 명령어로, into 다음에는 데이터를
               넣을 테이블 이름이 와야 합니다. 이후에는 해당 테이블의 컬럼들이 순서대로 등장합니다.


                 Note   이전에 사용했던 CREATE TABLE 및 INSERT 그리고 앞으로 배울 SELECT, UPDATE, DELETE 등은 모
                 두 SQL에서 사용할 키워드들이며, 대·소문자를 구분하지 않습니다. 여기서는 SQL을 insert into라고 사용했지만
                 INSERT INTO처럼 대문자로 사용해도 무방합니다.



               code, bid_price, quantity, created_at, will_clear_at까지 모든 열 이름을 넣으면 values라는
               키워드가 등장합니다. 이 키워드 다음에는 열 수에 맞는 물음표를 넣습니다.

               그다음 코드를 살펴보겠습니다.

                 cur.execute(sql, ('005930', 70000, 10, '20201222', 'today'))


               execute 함수를 보면 매개변수 sql 외에 ('005930', 70000, 10, '20201222', 'today')를 두 번
               째 매개변수로 사용합니다. 이 값들은 우리가 정의한 테이블의 열 순서인 종목 코드(code), 매수
               가(bid_price), 수량(quantity), 생성 일자(매수 일자(created_at)), 청산 예정 일자(매도 예정 일

               자(will_clear_at))를 의미하며, sql에서 values 다음 등장하는 (?, ?, ?, ?, ?)에 순서대로 사용
               됩니다.

               따라서 수행되는 SQL은 balance 테이블에 종목 코드: ‘005930’, 매수가: 70000, 수량: 10, 생성
               일자: ‘20201222’, 청산 예정 일자: ‘today’인 데이터를 넣으라는 의미입니다.


         310





     주식매매_05.indd   310                                                                      2021-09-30   오후 3:20:44
   17   18   19   20   21   22   23   24   25