Python

[Python]SQLite3 모듈: 파이썬에서 DB연동하기 (예제 포함)

zzheng 2024. 5. 24. 16:54

 

SQLite3모듈이란?

파이썬에서 SQLite3 데이터베이스를 다룰 수 있는 모듈입니다.


SQLite3모듈은 파이썬 표준 라이브러리(파이썬이 설치될 때 기본적으로 설치되는 모듈)에 포함되어 있습니다. 

따라서 표준 라이브러리인 sqlite3 모듈을 이용하면 SQLite 데이터베이스를 이용할 수 있습니다.

파이썬 SQLite 라이브러리 불러오기 및 버전 확인

파이썬에서 SQLite 데이터베이스를 사용하려면, 먼저 SQLite3모듈을 import 해야된다. 

import sqlite3

 

SQLite3모듈 접속 관련 함수

- connect() SQLite 데이터베이스 연결.
데이터베이스 파일이 존재하지 않으면 새로운 데이터베이스 파일을 생성함.
연결된 데이터베이스 객체를 반환.
- cursor() 데이터베이스와 상호작용하기 위한 cursor객체를 생성. 
cursor 객체는 SQL 쿼리를 실행하고, 결과를 가져오는 등의 작업을 수행.
- close() 데이터베이스 연결을 닫음. 
- execute() 지정된 SQL 쿼리를 실행.
- executemany() 같은 SQL 쿼리를 반복적으로 실행. 여러개의 파라미터 세트를 처리할  때 사용함. 
- fetchone() 결과 세트에서 다음 행(row)을 반환.
- fetchmany() 결과 세트에서 다음 여러 개의 행을 가져옴.
size 파라미터를 지정하지 않으면 기본값으로 cursor.arraysize를 사용(기본값:1)
cursor.arraysize = 100과 같이 변경 가능.
- fetchall() 결과 세트에서 모든 행을 가져옴.

 

파이썬으로 DB 만들기(예제)

그럼, SQLite3모듈 접속 관련 함수를 사용해서 데이터베이스를 만들어보겠습니다. 

파이썬에 아래와 같이 코드를 작성하고 save 후, run하면 파일이 만들어진 것을 볼 수 있습니다.  

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT NOT NULL,
    age INTEGER NOT NULL
)
""")

# 커밋
conn.commit()

# 연결 닫기
cursor.close()
conn.close()

 

example.db 파일을 파이썬에서는 확인할 수 없으며, 확인하고 싶으면 'DB Browser'을 이용해 확인할 수 있습니다. 

'DB Browser 클릭 - 데이터베이스 열기 클릭' 을 하면 users가 생성된 것을 확인할 수 있습니다. 

 

그럼 데이터를 삽입해보겠습니다. 

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

try:
    cursor.execute("INSERT INTO users (name, age) VALUES (?,?)", ('Alice', 20))
    cursor.execute("INSERT INTO users (name, age) VALUES (?,?)", ('Bob', 25))
    cursor.execute("INSERT INTO users (name, age) VALUES (?,?)", ('Charlie', 30))
    conn.commit()

except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

 

- executemany() 함수 예제

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

#데이터 삽입을 위한 파라미터 세트
data = [('John', 30), ('Jane',25), ('Stella', 40)]
                                    
try:
    #executemany() 메서드를 사용하여 여러개의 데이터 삽입
  
    cursor.executemany("INSERT INTO users (name, age) VALUES (?,?)", data)
    conn.commit()

except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

 

새로고침해서 확인해보시면 생성된것을 확인할 수 있습니다. 

 

- fetchone() 함수  예제

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

#데이터 삽입을 위한 파라미터 세트
data = [('John', 30), ('Jane',25), ('Stella', 40)]
                                    
try:
    #user 테이블의 모든 행 가져오기
    cursor.execute("SELECT * FROM users")
    row = cursor.fetchone()

    #결과 출력
    if row:
        print(row)
    else:
        print("NO data")
        
except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

<실행결과>

Alice라는 정보를 얻을 수 있습니다. 

 

아래 코드 부분을 똑같이 복사해서 두번 실행해보겠습니다. 

    row = cursor.fetchone()

    # 결과 출력
    if row:
        print(row)
    else:
        print("NO data")

 

<전체코드>

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

# 데이터 삽입을 위한 파라미터 세트
data = [('John', 30), ('Jane',25), ('Stella', 40)]
                                    
try:
    # user 테이블의 모든 행 가져오기
    cursor.execute("SELECT * FROM users")
    row = cursor.fetchone()

    # 결과 출력
    if row:
        print(row)
    else:
        print("NO data")

    row = cursor.fetchone()

    # 결과 출력
    if row:
        print(row)
    else:
        print("NO data")
        
except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

<실행결과>

fetchone() 함수는 다음 행(row)을 반환하기 때문에 Bob 라는 정보를 얻을 수 있습니다. 

- fetchmany() 함수  예제

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

# 데이터 삽입을 위한 파라미터 세트
data = [('John', 30), ('Jane',25), ('Stella', 40)]
                                    
try:
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchmany(3)

    #결과 출력
    for row in rows:
        print(row)
        
except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

 

<실행결과>

- fetchall() 함수  예제

import sqlite3

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

# 데이터 삽입을 위한 파라미터 세트
data = [('John', 30), ('Jane',25), ('Stella', 40)]
                                    
try:
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()

    #결과 출력
    for row in rows:
        print(row)

except Exception as e:
    conn.rollback()
    print(e)

finally:
    # 연결 닫기
    cursor.close()
    conn.close()

<실행결과>