파이썬에는 기본으로 sqlite3 라이브러리가 포함됩니다.
import sqlite3
한줄 추가하면 바로 DB를 사용할 수 있습니다. 로컬밖에 되지 않는다는 단점이 있지만 공부 목적이나 단순 프로그램 작성시 활용성이 좋습니다.
sqlite3 사용 툴 추천
많은 제품을 사용해 본건 아니지만 그 중에서 DB Browser for SQLite를 추천합니다. 사용법이 단순하고 직관적입니다. 쓰면서 딱히 불만은 없었습니다.
공식 다운로드 링크 : https://sqlitebrowser.org/dl/
기본 insert문
# SQLite 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# 데이터 삽입
cursor.execute("INSERT INTO goods_url (id, 'product') VALUES (?, ?)", uploaded_product_id, uploaded_product)
# 변경사항 저장 (커밋)
conn.commit()
# 연결 종료
conn.close()
INSERT INTO goods_url (id, ‘product’) VALUES (?, ?)”, uploaded_product_id, uploaded_product
DB연결하고 데이터를 삽입하는 간단한 과정입니다. uploaded_product_id, uploaded_product 2개의 변수를 받아와서 goods_url 테이블에 삽입합니다.
여기서 값을 받을 때 int형 변수는 그냥 써도 되지만 text형의 변수는 따옴표(‘ ‘)를 꼭 넣어줘야 에러를 방지할 수 있습니다.
여기서 실행문 자체가 쌍따옴표(” “)로 묶여 있기 때문에 text형 변수는 따옴표(‘ ‘)로 처리하면 됩니다. 이 부분에서 은근히 장애 잡기가 어렵습니다. 변수를 보통 따옴표로 묶지 않으니까요.
실행문의 다른 방법도 있습니다. 바인딩하는 또 다른 방법인데요.
# 데이터 삽입
cursor.execute("INSERT INTO goods_url (id, 'product') VALUES ({}, '{}')",format(uploaded_product_id, uploaded_product))
물음표를 {}로 변경하고 포멧을 받을 수 있습니다.
기본 delete문
# SQLite 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# number에 맞는 데이터 삭제
cursor.execute("DELETE FROM goods_url WHERE num = ?", number)
# 변경사항 저장 (커밋)
conn.commit()
# 연결 종료
conn.close()
DELETE FROM goods_url WHERE num = ?”, num
number 변수의 값이 num 컬럼에 있다면 그 row 데이터를 삭제하는 구문입니다. 받는 변수가 text형이라면 insert문에서와 같이 따옴표(‘ ‘)로 묶어줘야 합니다.
기본 update문
# SQLite 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
cursor.execute("UPDATE goods_url SET scraping_used={} where num={}",format(mod_num, product_num))
# 변경사항 저장 (커밋)
conn.commit()
# 연결 종료
conn.close()
UPDATE 테이블명 SET 변경할 필드값={} WHERE num={}”,format(mod_num, product_num)
해당 실행문은 mod_num, product_num 2개의 변수를 goods_url 테이블의 porduct_num 변수에 해당하는 row데이터의 scraping_used 값을 mod_num으로 변경합니다.
이렇때 사용가능하겠죠. 상품 정보의 스크래핑의 끝난 row 데이터는 scraping_used 필드값을 1로 변경하는 경우 다음과 같이 update문으로 컨트롤 가능합니다.
입력이 끝난 데이터를 delete할 수도 있겠지만 이력관리 차원에서 하나의 특정 컬럼을 활용하여 update로 관리하는 것이 더 좋습니다.
기본 select문
# 등록된 제품인지 확인
def confirm_uploaded_product(product_num):
# SQLite 데이터베이스 연결
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# 데이터 조회
cursor.execute("SELECT product_num FROM uploaded_list WHERE product_num = '{}".format(product_num))
product_num = cursor.fetchall()
# 연결 종료
conn.close()
return product_num[0][0]
select문의 경우 메소드로 가지고 왔습니다. 변수 product_num을 받아서 이미 등록된 제품인지 조회합니다.
SELECT product_num FROM uploaded_list WHERE product_num = ‘{}”.format(product_num)
uploaded_list 테이블에서 product_num을 조회하고 있으면 product_num을 출력하겠죠?
출력된 값은 딕셔너리와 튜플에 둘러싸여 있기 때문에 product_num[0][0]을 리턴합니다. 이렇게 하면 상품번호(product_num)을 받아와서 uploaded_list에 해당 상품이 있는지 조회하고 있으면 그 상품번호를 고대로 리턴하게 됩니다. 없다면 리턴값이 없겠죠.
메소드 리턴값이 있는 경우 if문으로 조건 걸어 pass 또는 등록여부를 결정할 수 있을 것입니다.
간단하게 DB를 사용하는 대표적인 4가지 명령문을 알아봤습니다.