콘텐츠로 건너뛰기
Home » 파이썬 sqlite3 활용 insert, delete, update, select 하는 법

파이썬 sqlite3 활용 insert, delete, update, select 하는 법

파이썬에는 기본으로 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가지 명령문을 알아봤습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다