Psycopg로 CRUD 클래스 구현

anjiyoo·2024년 3월 27일

Database

목록 보기
4/4
post-thumbnail

1.Psycopg로 CRUD 클래스 구현

  • DB에 연걸(커넥션) -> 커서 객체 생성 -> CRUD 구현 (SQL문)

1-1.PostgreSQL 연결하기

imort psycopg2

# db정보를 직접 설정해서 접속하기
conn = psycopg2.connect(
        host = '',
        user = '',
        password = '',
        dbname = '',
        port=
)
# 커넥션을 config 딕셔너리 방식으로 설정해 db 접속하기
# .env 파일을 이용해서 pw관리
conn_config = {
  'host' : 'hanslab.org',
  'user' : 'postgres',
  'password' : 'G=nf_-}EKl',
  'dbname' : 'testdb_yja',
  'port' : 25432
}
conn_lion = psycopg2.connect(**conn_config)  # **을 쓰면 (키워드=값) 형태로 함수를 호출

1-2.cursor 생성

  • 커서를 이용해 전달
cur = conn_lion.cursor()  # 커서를 이용해서 다양한 쿼리 문을 전달할 수 있음
                          # 쿼리문은 db에 명령을 내리는 sql문 -> CRUD
cur_lion = conn_lion.cursor()

1-3.insert

sql = "insert into actor (first_name, last_name) values ('명훈','신'), ('승희','이'), ('지현','이');"
cur.execute(sql)  # db로 sql 전달
conn.commit()  # db로 실제 값 전달
# f-string 이용해서 sql 전달
first_name = "윤우"
last_name='남'
sql = f"insert into actor (first_name, last_name) values ('{first_name}','{last_name}')"
print(sql)
cur.execute(sql) # sql : insert into actor (first_name, last_name) values ('윤우','남')
conn.commit()
# f-string 이용해서 sql 전달
first_name = "지안"
last_name = "유"
sql = "insert into actor (first_name, last_name) values ('{}', '{}')".format(first_name, last_name)
print(sql)
cur.execute(sql)  # db로 sql 전달
conn.commit() # db로 실제 sql 전달

1-4.select

# select
sql = "select * from actor"
cur.execute(sql)  # db로 slq 전달
rows = cur.fetchall()  # sql 보여주기
# colab 값 출력해보기
for row in rows[-10:]:
    print(row)

1-5.update

# update
sql = "update actor set last_name = 'num' where last_name = '남';"
cur_lion.execute(sql)  # db로 sql 전달
conn_lion.commit() # db로 실제 sql 전달

1-6.delete

# delete
sql = "delete from actor where last_name = '룡';"
cur_lion.execute(sql)  # db로 sql 전달
conn_lion.commit() # db로 실제 sql 전달

2.Class로 만들기

  • Database class
  • CRUD class

2-1.Database Class

# Database class
class Database:
    def __init__(self, host='hanslab.org', user='postgres', password='G=nf_-}EKl', dbname='testdb_yja', port='25432'):
      self.conn_config = {
        'host' : host,
        'user' : user,
        'password' : password,
        'dbname' : dbname,
        'port' : port
      }
      # 커넥션 객체 생성, 커서 생성
      self.conn_lion = psycopg2.connect(**self.conn_config)
      self.cur = self.conn_lion.cursor()
    
    def execute_query(self, sql):  # insert, update, delete 명령
       # db로 값 전달
       self.cur.execute(sql)
       self.conn_lion.commit()

    def fetch_datas(self, sql):  # select 명령
       # select 값 받아오기
       self.cur.execute(sql)
       output = self.cur.fetchall()
       return output
    
    def close(self):
       # 연결 해제
       self.cur.close()
       self.conn_lion.close()

2-2.CRUD Class

# CRUD class
class CustomerCRUD:
    def __init__(self, db):
        self.db = db

    def create(self, first_name, last_name):
        sql = "insert into actor (first_name, last_name) values ('{}','{}')".format(first_name, last_name)
        self.db.execute_query(sql)
    def read(self):pass
    def update(self):pass
    def delete(self):pass  
    
    
db = Database()
customer_crud = CustomerCRUD(db)

actor_names = [
    ('하니', '이'),
    ('우성', '정'),
    ('정민', '황')
]

for first_name_1, last_name_1 in actor_names:
    customer_crud.create(first_name=first_name_1, last_name=last_name_1)    
profile
기록으로 흔적을 남기는 것을 좋아합니다

0개의 댓글