학습주제
트렌젝션에 대해 더 배워본다
학습내용
트랜젝션 테스트를 해볼 테이블을 정의하고 레코드 2개를 넣어본다.
기본적으로 AUTO COMMIT True.
Insert into 하면 바로 DB에 ㅔ반영됨.
다른 사용자가 DB에 접근했을 때도 바로 반영됨.
현재는 트랜젝션 없이 레코드를 넣었기 때문에 바로 뜬다.
다른 셀에서도 뜬다.
파이썬을 가지고 오토 커밋을 조정해본다.
import psycopg2
# Redshift connection 함수
def get_Redshift_connection(autocommit):
host = "learnde.cduaw970ssvt.ap-northeast-2.redshift.amazonaws.com"
redshift_user = "guest"
redshift_pass = "Guest1!*"
port = 5439
dbname = "dev"
conn = psycopg2.connect("dbname={dbname} user={user} host={host} password={password} port={port}".format(
dbname=dbname,
user=redshift_user,
password=redshift_pass,
host=host,
port=port
))
conn.set_session(autocommit=autocommit)
return conn
문자열 중괄호 안에 인자를 넣고, 그 인자를 fromat함수에서 이전에 만든 변수를 대입시킨다.
conn.set_session(autocommit=autocommit)
을 보면 함수에서 autocommit 인자를 받는 걸 볼 수 있다. Boolean 타입임
True, False에 따라 commit 모드는 달라짐.
Redshift connection을 만드는데, auto commit을 False를 줌.
DB 수정이 바로 적용이 안되고, COMMIT를 써야 그 변경사항이 반영되고, 다른 커넥션에서도 볼 수 있음.
커서를 받음
execute 함수로 SQL을 지정해줄 수 있음.
그 결과는 cur.fetchall()로 만들어낼 수 있고, 그 결과는 res로 받음
그리고 for문으로 res를 출력하면 된다.
한줄씩 튜플식으로 레코드가 나오는 것을 볼 수 있음
그러나 이는 SELECT 문으로 DB 수정이 없음. COMMIT 과 관련이 없음.
이번엔 DELETE 명령어를 사용해본다.