반응형
15. 데이터베이스(ORACLE)
15.1 오라클 테이블
DROP TABLE Product CASCADE CONSTRAINTS;
-- CLOB: 최대 4G 입력 가능, 한 테이블에서 여러 컬럼에 사용 가능, 검색 가능
-- LONG: 최대 2G 입력 가능, 한 테이블에서 1개 컬럼만 사용 가능, 검색이 안 됨
CREATE TABLE Product (
product_id NUMBER, -- 상품 코드
product_name VARCHAR2(50), -- 상품 이름
price NUMBER DEFAULT 0, -- 단가
description CLOB, -- 상품 설명
picture_url VARCHAR2(500), -- 상품 이미지 파일 이름
PRIMARY KEY(product_id)
);
-- SELECT * FROM Product WHERE description LIKE '%샘플%';
INSERT INTO Product VALUES (1, '레몬', '1500', '레몬에 포함된 구연산은 피로 회복에 좋습니다. 비타민 C도 풍부합니다.', 'lemon.jpg');
INSERT INTO Product VALUES (2, '오렌지', '2000', '비타민 C가 풍부합니다. 생과일주스로 마시면 좋습니다.', 'orange.jpg');
INSERT INTO Product VALUES (3, '키위', '3000', '비타민 C가 매우 풍부합니다. 다이어트나 미용에 좋습니다.', 'kiwi.jpg');
INSERT INTO Product VALUES (4, '포도', '5000', '폴리페놀을 다량 함유하고 있어 항산화 작용을 합니다.', 'grape.jpg');
INSERT INTO Product VALUES (5, '딸기', '8000', '비타민 C나 플라보노이드를 다량 함유하고 있습니다.', 'strawberry.jpg');
INSERT INTO Product VALUES (6, '귤', '7000', '시네프린을 함유하고 있어 감기 예방에 좋다고 합니다.', 'tangerine.jpg');
SELECT * FROM Product;
COMMIT;
-- 상품 코드를 위한 시퀸스 생성
DROP SEQUENCE seq_product;
CREATE SEQUENCE seq_product
START WITH 10
INCREMENT BY 1;
INSERT INTO Product VALUES (seq_product.NEXTVAL, '사과', 1500, '맛있는 사과예요.', 'apple.jpg');
SELECT * FROM Product;
COMMIT;
15.2 파이썬 코드
cx_Oracle 설치
# pip install cx_Oracle
import cx_Oracle
오라클 연결
conn = cx_Oracle.connect("java/java1234@localhost:1521/orcl")
cursor = conn.cursor()
# 전체 레코드 삭제
sql = "DELETE FROM Product"
cursor.execute(sql)
레코드 추가
# 레코드 추가
items = [
(1, '레몬', 1500, \
'레몬에 포함된 구연산은 피로 회복에 좋습니다. 비타민 C도 풍부합니다.', 'lemon.jpg'),
(2, '오렌지', 2000, \
'비타민 C가 풍부합니다. 생과일주스로 마시면 좋습니다.', 'orange.jpg'),
(3, '키위', 3000, \
'비타민 C가 매우 풍부합니다. 다이어트나 미용에 좋습니다.', 'kiwi.jpg'),
(4, '포도', 5000, \
'폴리페놀을 다량 함유하고 있어 항산화 작용을 합니다.', 'grape.jpg'),
(5, '딸기', 8000, \
'비타민 C나 플라보노이드를 다량 함유하고 있습니다.', 'strawberry.jpg'),
(6, '귤', 7000, \
'시네프린을 함유하고 있어 감기 예방에 좋다고 합니다.', 'tangerine.jpg')
]
for row in items:
sql = "INSERT INTO Product VALUES (:1, :2, :3, :4, :5)"
cursor.execute(sql)
# 레코드 개수
sql = "SELECT COUNT(*) FROM Product"
cursor.execute(sql)
count = cursor.fetchone()
print("상품 개수:", count[0])
전체 레코드 조회
# 전체 레코드 조회
sql = "SELECT * FROM Product"
cursor.execute(sql)
# 한 라인씩 읽음
for row in cursor:
# print(row)
# CLOB 필드를 읽는 방법
description = row[3].read()
print(row)
print(description)
일부 레코드 삭제
# 일부 레코드 삭제
sql = "DELETE FROM Product WHERE product_id = 6"
cursor.execute(sql)
conn.commit()
모든 레코드 삭제
# 모든 레코드 삭제
sql = "DELETE FROM Product"
cursor.execute(sql)
conn.commit()
모든 레코드 삽입
# 모든 레코드를 한 번에 INSERT
sql = "INSERT INTO Product VALUES (:1, :2, :3, :4, :5)"
cursor.bindarraysize = len(items) # 리스트의 개수(6개)를 커서에 전달
cursor.executemany(sql, items) # 리스트의 개수만큼 반복 처리
conn.commit()
모든 레코드 조회 및 저장
# 모든 레코드를 한꺼번에 조회하여 리스트로 저장
sql = "SELECT * FROM Product"
cursor.execute(sql)
rs = cursor.fetchall()
print("\n레코드셋:", rs)
for row in rs:
description = row[3].read()
print(row)
print(description)
커서와 커넥션 닫기
cursor.close()
conn.close()
반응형