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)