Country Table 관련한 CRUD 클래스 만들기(실습예제)

송용진·2024년 3월 25일
import psycopg2

class CountryCRUD:
	def __init__(self, dbname, user, password, host = 'localhost'):
		self.conn_params = {
        'dbname' : dbname,
        'user' : user,
        'password' : password,
        'host' : host
        }
        self.conn = None # 데이터베이스 연결 객체를 저장할 변수를 None으로 초기화
        self.connect()
	def connect(self):# 데이터베이스에 연결하는 메서드
		try:# try 블록을 사용하여 예외 처리를 시도
        	self.conn = psycopg2.connect(**self.conn_params) # psycopg2의 connect 함수를 사용해 데이터베이스에 연결
            print("데이터베이스에 성공적으로 연결되었습니다.")
        except psycopg2.Error as e: # psycopg2에서 발생하는 예외를 처리
        	print(f"데이터베이스 연결 중 오류가 발생했습니다: {e}")
	def create_country(self, country): # country 테이블에 새로운 나라를 추가하는 메서드
		print(country)
    	with self.conn.cursor() as cur: # 커서 객체를 사용하여 데이터베이스 작업을 수행
    		cur.execute("""INSERT INTO country (country) VALUES (%s) RETURNING country_id;""", (country,)) # SQL 쿼리를 실행하여 country 테이블에 새로운 나라를 추가
        	country_id = cur.fetchone()[0]
        	self.conn.commit()
        	print(f"국가 '{country}'이(가) country {country_id}로 추가되었습니다.")
        	return country_id        
	def read_country(self, country_id): # country_id를 기반으로 국가 정보를 조회
		with self.conn.cursor() as cur: # 커서 객체를 사용하여 데이터베이스 작업을 수행
        	country = cur.fetchone()
            if country : # 조회된 국가 정보가 있다면
            	print(country)
                return country
	def update_country(self, country_id, country=None): # 특정 국가의 정보를 업데이트
		with self.conn.cursor() as cur: # 커서 객체를 사용하여 데이터베이스 작업을 수행
        	cur.execute("""UPDATE country SET country = %s WHERE country_id = %s;""", (country, country_id)) # SQL 쿼리를 실행하여 특정 country_id의 국가 정보를 업데이트
            self.conn.commit()
            print(f"국가 {country_id}의 정보가 업데이트되었습니다.")
	def delete_country(self, country_id): # 영화 정보를 삭제
		with self.conn.cursor() as cur:
        	cur.execute("DELETE FROM country WHERE country_id = %s;",(country_id,))
            self.conn.commit()
            print(f"country {country_id}의 정보가 삭제되었습니다.")
	def close(self): # 데이터 베이스 연결을 종료
		if self.conn:
        	self.conn.close()
            print("데이터베이스 연결이 종료되었습니다.")

self.conn_params
CountryCRUD 클래스 내에서 데이터베이스 연결을 설정하기 위해 필요한
매개변수들을 저장하는 딕셔너리
(이 사전에는 데이터베이스에 접속하기 위해 필요한 정보들이 키-값 쌍으로 저장되어 있음)

self.conn_params 딕셔너리는
psycopg2.connect() 함수를 호출할 때 인자로 전달됨

psycopg2.connect() 함수는 이 정보를 사용하여 PostgreSQL 데이터베이스에 연결을 시도

인자들은 키워드 인자로 전달되기 때문에,
**self.conn_params와 같이 **를 사용하여 함수에 사전을 전달
이렇게 하면 사전의 키-값 쌍이 함수의 매개변수와 그 값으로 자동으로 매핑됨


INSERT INTO country (country) VALUES (%s) RETURNING country_id;

country 테이블에 새로운 레코드를 삽입하고,
삽입된 레코드의 country_id 값을 반환하는 작업을 수행

INSERT INTO country (country)
country라는 이름의 테이블에 데이터를 삽입
괄호 안의 country는 삽입할 데이터가 들어갈 테이블의 컬럼(열) 이름을 지정
여기서는 country 테이블의 country 컬럼에 데이터를 삽입하겠다는 의미

VALUES (%s): VALUES
키워드 다음에 오는 괄호 안의 %s는 삽입할 데이터의 값을 나타냄

RETURNING country_id
RETURNING 절은 삽입, 수정, 삭제 등의 작업을 수행한 후
해당 작업의 결과로 얻어진 특정 값을 반환하고자 할 때 사용됨

profile
개발자

0개의 댓글