SQLite - Python으로 DB 구축

2024. 1. 17. 21:20python

요즘 많은 양의 데이터를 조회하고 관리하다보니, 이를 효율적으로 하고 싶다는 needs가 많이 생겼다.

python multiprocessing 관련 - https://jaeha-lee.tistory.com/7

 

python - multiprocessing, pool, process

키워드 : pool, process, pool.starmap 대용량, 많은 양의 데이터를 옮기고 이동하면서 병렬 프로그래밍의 필요성을 느끼고 얻게 된 내용을 정리하고자 한다. (이론보다는 코드 기반으로...) python은 기본

jaeha-lee.tistory.com

개발 환경 상 서버없이 하는 경우가 필요했는데 SQLite라는 Python에서 제공하는 모듈이 있었다.

SQLite는 서버없이 로컬에서 파일로 데이터베이스를 관리할 수 있다고 한다. 많은 서비스에서 내장 데이터 베이스로 많이 사용된다고 한다.

본 포스팅에서는 SQLite에 대해서 포스팅하고자 한다.

 

먼저 간략하게 db를 생성하고 데이터를 집어 넣는 과정

import sqlite3

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

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

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

# 데이터 삽입
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('John Doe', 25))

# 쿼리 실행 및 결과 가져오기
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)
"""
출력 
(1, 'John Doe', 25)
(2, 'Jane Smith', 30)
"""


# 연결 종료
conn.close()

 

이런식으로 실행을 하면 example.db에 계속 데이터가 축적되게 된다.

 

dict 데이터 Sqlite로 집어넣기

 

import sqlite3

# 딕셔너리 데이터 예제
data = [
    {'id': 1, 'name': 'John', 'age': 25},
    {'id': 2, 'name': 'Jane', 'age': 30},
    # 추가적인 딕셔너리 데이터들...
]

# SQLite 데이터베이스에 연결
conn = sqlite3.connect('./dict_example.db')

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

# 테이블 생성 (이미 테이블이 있다면 생략 가능)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS test (
        id INTEGER PRIMARY KEY,
        name TEXT,
        age INTEGER
    )
''')

# 딕셔너리 데이터를 데이터베이스에 삽입
for item in data:
    cursor.execute('INSERT INTO test (id, name, age) VALUES (?, ?, ?)', (item['id'], item['name'], item['age']))

# 데이터베이스에 변경 사항 저장
conn.commit()

# 연결 종료
conn.close()

 

sqlite 데이터 조회하기

import sqlite3

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

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

# 데이터 조회
cursor.execute('SELECT * FROM test')
rows = cursor.fetchall()

# 나이가 25 이상인 사용자 조회
cursor.execute('SELECT * FROM users WHERE age >= ?', (25,))
filtered_rows = cursor.fetchall() # 리스트로 반환함
import pdb;pdb.set_trace()
# 결과 출력
for row in rows:
    print(row)

# 연결 종료
conn.close()