Python Sqlite3 사용하기 ( 로컬 DB )

Python 데이터베이스 관리 모듈중 하나인 Sqlite3 사용법에 대해 살펴보겠습니다.

 

Sqlite는 데이터베이스 관리 시스템으로

서버가 아니라 응용프로그램에 넣어 사용하는 가벼운 DBMS 입니다.

별도의 DB전용 프로그램이 없이 파이썬에서 Sqlite3 모듈을 이용해 사용할 수 있습니다.

 

 

Sqlite3 사용법

1. DB 연결 및 Cursor 생성

- connect(DB) 함수를 통해 DB를 연결 합니다. ( 없을 경우 생성됩니다. )

- 해당 DB에서 Sql작업을 진행하기 위해 필요한 Cursor를 생성합니다.

import sqlite3

# DB생성 또는 연결
connect = sqlite3.connect("temp.db");

# Cursor 생성
cursor = connect.cursor();

 

 

 

2. 테이블 생성

- Cursor에 execute(SQL) 함수로 SQL을 실행하여 테이블을 생성합니다.

import sqlite3

connect = sqlite3.connect("temp.db");
cursor = connect.cursor();

# 테이블 생성
cursor.execute("CREATE TABLE TEST_TABLE(name text, age interger)");

 

3. 데이터 입력

- Cursor에 execute(SQL) 함수로 SQL을 실행하여 데이터를 입력합니다.

- 데이터입력은 기본 String Query뿐만 아니라 Parameter로 Tuple, Dictionary 사용하여 입력 할 수 있습니다.

import sqlite3

connect = sqlite3.connect("temp.db");
cursor = connect.cursor();

# String Parameter
cursor.execute("INSERT INTO TEST_TABLE VALUES('Aiden', '25')");
# Tuple Parameter
cursor.execute("INSERT INTO TEST_TABLE VALUES(?, ?)", ('Matthew', 23));
# Dictionary Parameter
cursor.execute("INSERT INTO TEST_TABLE VALUES(:name, :age)", {"name": "John", "age": 21});
# List Parameter
cursor.executemany("INSERT INTO TEST_TABLE VALUES(?, ?)", (("Mike", 16), ("Lina", 17)));

 

4. 데이터 조회

- Cursor에 execute(SQL) 함수로 SQL을 실행하여 데이터를 조회합니다.

- Cursor객체는 한 번 읽은 데이터는 다시 읽을 수 없음을 주의합니다. ( 다시읽으려면 Select 쿼리 다시실행.. )

import sqlite3

connect = sqlite3.connect("temp.db");
cursor = connect.cursor();

# 데이터 조회
cursor.execute("SELECT * FROM TEST_TABLE");
# 상위 한건 조회
print(cursor.fetchone());
# ('Aiden', 25)

# 조회되었던건 제외하고 상위 2건조회 ..제일상위 1건은 조회했기때문에
print(cursor.fetchmany(2));
# [('Matthew', 23), ('John', 21)]

cursor.execute("SELECT * FROM TEST_TABLE"); 
cursor.fetchall(); # 모든 데이터 조회
# [('Aiden', 25), ('Matthew', 23), ('John', 21), ('Mike', 16), ('Lina', 17)]

 

5. 데이터 수정 및 삭제

- Cursor에 execute(SQL) 함수로 SQL을 실행하여 데이터를 수정 또는 삭제합니다.

import sqlite3

connect = sqlite3.connect("temp.db");
cursor = connect.cursor();

# 데이터 수정하기
cursor.execute("UPDATE TEST_TABLE SET age=? WHERE name=?", (30, "Aiden"));

# 데이터 삭제하기
cursor.execute("DELETE FROM TEST_TABLE WHERE name=?", ("Aiden",));

 

6. Commit & Rollback

- 데이터 입력,수정,삭제 에대한작업은 Commit 하기전에는 실제 DB에 반영되지 않습니다.

- DB연결시 isolation_level=None 설정하면 자동Commit 됩니다.

# 변경사항을 DB에 반영
connect.commit();

# 변경사항을 DB에 반영하지 않음
connect.rollback();

# isolation_level=None, Auto Commit할때.. commit할 필요없이 자동 Commit 됩니다.
connect.sqlite3.connect("temp.db", isolation_level=None);