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);