PostgreSQL - Python Interface: A Beginner's Guide
안녕하세요, 미래의 데이터베이스 마법사 여러분! PostgreSQL과 Python의 세계로의 흥미로운 여정을 안내해 드리게 되어 기쁩니다. 컴퓨터 과학을 몇 년 동안 가르쳐온 사람으로서, 이 조합은 바로花生버터와 젤리처럼 - 정말 맛있는 것입니다! 그麼, 손을 비벼서 시작해 보겠습니다!
설치
마법을 만들기 전에 도구를 설정해야 합니다. 이를 요리 전에 주방을 준비하는 것으로 생각해 보세요.
-
먼저, 컴퓨터에 PostgreSQL이 설치되어 있는지 확인하세요. 공식 PostgreSQL 웹사이트에서 다운로드할 수 있습니다.
-
그다음, PostgreSQL과 소통할 수 있도록 해주는 Python 모듈을 설치해야 합니다. 터미널이나 명령 프롬프트를 엽니다:
pip install psycopg2
이 명령은 컴퓨터에게 도구 상자에 새로운 도구를 추가하도록 요청하는 것과 같습니다. 설치가 완료되면 시작할 준비가 되었습니다!
Python psycopg2 모듈 API
이제 도구가 준비되었으니, 그것이 무엇을 할 수 있는지 빠르게 살펴보겠습니다. psycopg2 모듈은 PostgreSQL과 상호작용할 수 있는 함수 집합을 제공합니다. 다음은 가장 일반적인 함수들입니다:
함수 | 설명 |
---|---|
connect() | 데이터베이스에 연결을 설정합니다 |
cursor() | SQL 명령을 실행하기 위한 커서 객체를 생성합니다 |
execute() | 데이터베이스 연산(쿼리 또는 명령)을 실행합니다 |
fetchone() | 쿼리 결과 집합의 다음 행을 가져옵니다 |
fetchall() | 쿼리 결과의 모든(나머지) 행을 가져옵니다 |
commit() | 현재 트랜잭션을 커밋합니다 |
rollback() | 진행 중인 트랜잭션을 되돌립니다 |
close() | 데이터베이스 연결을 닫습니다 |
이제 이 것들이 외국어처럼 보일 수 있지만, 우리는 하나씩 자세히 탐구해 나갈 것입니다!
데이터베이스 연결
먼저 데이터베이스에 연결을 시도해 보겠습니다. 이는 문을 두드리고 들어오는 것을 요청하는 것과 같습니다.
import psycopg2
try:
connection = psycopg2.connect(
database="mydb",
user="myuser",
password="mypassword",
host="localhost",
port="5432"
)
print("연결 성공!")
except (Exception, psycopg2.Error) as error:
print("PostgreSQL 연결 중 오류", error)
이 코드에서 우리는:
- psycopg2 모듈을 임포트합니다
-
connect()
함수를 사용하여 연결을 설정합니다 - 데이터베이스 이름, 사용자, 비밀번호 등 필요한 정보를 제공합니다
- try-except 블록을 사용하여 잠재적인 오류를 처리합니다
모든 것이 잘되면 "연결 성공!"이 출력됩니다. 축하합니다, 데이터베이스의 문을 열었습니다!
테이블 생성
이제 우리가 들어왔으니, 데이터를 저장할 테이블을 생성해 보겠습니다. 책을 정리할 책shelf를 설정하는 것을 상상해 보세요.
try:
cursor = connection.cursor()
create_table_query = '''CREATE TABLE books
(ID INT PRIMARY KEY NOT NULL,
TITLE TEXT NOT NULL,
AUTHOR TEXT NOT NULL,
PUBLISHED_DATE DATE);'''
cursor.execute(create_table_query)
connection.commit()
print("테이블 생성 성공!")
except (Exception, psycopg2.Error) as error:
print("테이블 생성 중 오류", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL 연결이 닫혔습니다")
여기서 우리는:
- 커서 객체를 생성합니다
- 'books' 테이블을 생성하는 SQL 쿼리를 정의합니다
- 쿼리를 실행합니다
- 변경 사항을 영구히 적용하기 위해 커밋합니다
- 마지막으로, 커서와 연결을 닫아 데이터베이스 시민으로서의 의무를 다합니다
INSERT 연산
이제 책shelf에 책을 추가해 보겠습니다! 테이블에 레코드를 삽입합니다.
try:
cursor = connection.cursor()
insert_query = """ INSERT INTO books (ID, TITLE, AUTHOR, PUBLISHED_DATE)
VALUES (%s, %s, %s, %s)"""
record_to_insert = (1, "To Kill a Mockingbird", "Harper Lee", "1960-07-11")
cursor.execute(insert_query, record_to_insert)
connection.commit()
print("레코드 삽입 성공")
except (Exception, psycopg2.Error) as error:
print("데이터 삽입 중 오류", error)
이 코드에서:
- 우리는 INSERT 쿼리를 만들어 placeholder(%s)를 사용합니다
- 삽입할 값들을 정의합니다
- 쿼리를 실행하고 값들을 전달합니다
- 변경 사항을 커밋합니다
SELECT 연산
이제 우리의 책shelf를 확인해 보겠습니다! 테이블에서 레코드를 가져옵니다.
try:
cursor = connection.cursor()
select_query = "SELECT * from books"
cursor.execute(select_query)
records = cursor.fetchall()
for row in records:
print("ID:", row[0])
print("TITLE:", row[1])
print("AUTHOR:", row[2])
print("출판 날짜:", row[3], "\n")
except (Exception, psycopg2.Error) as error:
print("데이터 가져오기 중 오류", error)
여기서 우리는:
- 모든 레코드를 가져오는 SELECT 쿼리를 만듭니다
- 쿼리를 실행합니다
-
fetchall()
을 사용하여 모든 결과를 가져옵니다 - 각 레코드를 순회하면서 책의 세부 정보를 출력합니다
UPDATE 연산
아이고! 우리는 실수를 했습니다. 레코드를 수정해 고치겠습니다.
try:
cursor = connection.cursor()
update_query = """Update books set AUTHOR = %s where ID = %s"""
cursor.execute(update_query, ("Nelle Harper Lee", 1))
connection.commit()
print("레코드 수정 성공")
except (Exception, psycopg2.Error) as error:
print("데이터 수정 중 오류", error)
이 코드에서:
- 우리는 수정할 저자 이름과 ID를 placeholder로 사용하는 UPDATE 쿼리를 만듭니다
- 쿼리를 실행하고 새로운 값을 전달합니다
- 변경 사항을 커밋합니다
DELETE 연산
마지막으로, 책shelf에서 책을 제거하는 방법을 배워보겠습니다.
try:
cursor = connection.cursor()
delete_query = """Delete from books where ID = %s"""
cursor.execute(delete_query, (1,))
connection.commit()
print("레코드 삭제 성공")
except (Exception, psycopg2.Error) as error:
print("데이터 삭제 중 오류", error)
finally:
if connection:
cursor.close()
connection.close()
print("PostgreSQL 연결이 닫혔습니다")
이 코드에서 우리는:
- ID를 placeholder로 사용하는 DELETE 쿼리를 만듭니다
- 삭제할 레코드의 ID를 전달하여 쿼리를 실행합니다
- 변경 사항을 커밋합니다
- 커서와 연결을 닫습니다
이제 PostgreSQL을 사용하여 Python으로 작업하는 기본을 배웠습니다. 연습이 완벽함을 기억하며, 다양한 것을 시도해 보세요. 행복한 코딩과 항상 완벽한 데이터베이스를 기원합니다!
Credits: Image by storyset