데이터베이스
데이터베이스란 데이터를 체계적으로 관리하고 저장하는 시스템이다. 테이블의 형태로 데이터를 관리하는 데이터베이스를 관계형 데이터베이스라고 한다. 팬더스의 데이터프레임을 테이블로 볼 수 있다. 데이터베이스는 SQL이라는 언어를 통해 제어할 수 있다.
SQLite
SQLite는 경량화된 데이터베이스 관리 시스템이다. 클라이언트에 내장되어 사용되는 경우가 많다. 파일 하나로 데이터베이스를 관리한다. 파이썬에서는 sqlite3 라이브러리를 통해 SQLite와 소통할 수 있다.
사용법
- sqlite와 연결한다
- cursor 객체를 생성한다
- 데이터베이스에 할 작업들을 지시한다
- 데이터베이스에 적용한다
- 연결을 종료한다
import sqlite3
# 데이터베이스 연결. 커서 객체 생성 - 데이터베이스와 상호작용하는 객체
con = sqlite3.connect("my_contacts.sqlite")
cur = con.cursor()
# 커서를 활용해 데이터베이스에 대한 명령 지시
# 기존에 동일한 이름 테이블 삭제 및 테이블 생성
cur.execute("DROP TABLE IF EXISTS my_contacts")
cur.execute("CREATE TABLE my_contacts (Name, Phone, Email, Birthday)")
# 데이터 삽입
cur.execute(
"INSERT INTO my_contacts VALUES ('Tom', '080-8686', 'tom@uncle.com', '1988-03-02')"
)
cur.execute(
"INSERT INTO my_contacts VALUES ('fish', '1234-5678', 'fish@ocean.com', '1970-5-29')"
)
cur.execute(
"INSERT INTO my_contacts VALUES ('홍길동', '8734-2398', 'gd@shong.kr', '1974-10-31')"
)
# 데이터 갱신
cur.execute("UPDATE my_contacts set Email='abcd@abc.com' where Name='Tom'")
# 데이터 삭제
cur.execute(
"DELETE FROM my_contacts where Name = 'fish'"
)
# 데이터베이스에 적용
con.commit()
# 결과 출력
for row in cur.execute("SELECT * FROM my_contacts"):
print(row)
# 데이터베이스 연결 종료
con.close()
명령을 지시하는 것과 별개로 commit을 하는 이유
cursor객체는 sqlite 데이터베이스와 파이썬이 소통하기 위해 사용하는 객체다. 객체를 통해 데이터베이스에 가하려는 작업들을 미리 명시한다. 하지만 데이터베이스는 원자성이 중요하기 때문에 transaction이 보장되어야한다. commit을 해야만 데이버테이스에 작업들이 영구적으로 반영하는 이유는 원자성을 보장하기 위함이다.