1. Google Colab에서 PostgreSQL 쓰기

1) 외부 URL에서 DB 로드해오기

1
2
3
%load_ext sql

%sql <URL> #postgresql 프로토콜을 사용하는 URL을 입력하면 그 URL에 접속하여 DB를 로드한다.

2) 로드해온 DB에서 SQL 쿼리 사용하기

1
2
3
%%sql

SELECT * FROM table1

3) 로드해온 DB에서 테이블을 추출하여 pandas의 DataFrame형 변수로 담기

1
2
result = %sql SELECT * FROM table1
df1 = result.DataFrame()

2. 파이썬에서 psycopg2 라이브러리를 import해서 쓰기

1) 외부 URL에서 DB 로드해오기

1
2
3
4
import psycopg2

conn1 = psycopg2.connect(f"dbname={dbname} user={user} host={host} password={password} port={port}")
cur1 = conn1.cursor()

2) 로드해온 DB에서 SQL 쿼리 사용하기

1
2
cur1.execute("SELECT * FROM table1")
result = cur1.fetchall() #튜플들이 리스트에 담겨 리턴돼 result 변수에 담긴다.

3) 로드해온 DB에서 테이블을 추출하여 pandas의 DataFrame형 변수로 담기

1
2
import pandas.io.sql as psql
result = psql.read_sql("SELECT * FROM table1", conn1)

4) psycopg2에서 트랜잭션 다루기

(a) autocommit=False로 세팅하고 트랜잭션 다루기

1
2
3
4
5
6
7
8
9
10
11
conn1.set_session(automcommit = False)

try:
    cur1.execute("DELETE FROM table1"); #TRUNCATE도 테이블의 모든 레코드를 삭제하기는 하지만 트랜잭션을 지원하지 않으므로 여기서는 쓸 수 없다.
    cur1.execute("INSERT INTO table1 VALUES ('fruit')")
    conn1.commit()
except (Exception, psycopg2.DatabaseError) as error:
    print(error)
    conn1.rollback()
finally:
    conn1.close()

(b) autocommit=True인 상태에서 트랜잭션 다루기

- autocommit=True일 때에도 여러 쿼리를 하나의 트랜잭션으로 다룰 수 있다.

1
2
3
4
cur1.execute("BEGIN;");
cur1.execute("DELETE FROM table1;");
cur1.execute("INSERT INTO table1 VALUES ('fruit');")
cur1.execute("END;")