import만 해도 sqlite3 DB를 사용할 수 있다고?
sqlite3 모듈은 파이썬 표준 라이브러리(파이썬이 설치될 때 기본적으로 설치되는 모듈)로 SQLite에 대한 인터페이스를 제공합니다. 표준 라이브러리인 sqlite3 모듈을 이용하면 SQLite 데이터베이스를 이용할 수 있습니다.
Python에서 SQLite 을 사용하기 위해서는 보통 pysqlite 으로 불리우는 Language binding (주: SQLite 라이브러리를 내부에서 사용)을 사용하는데, pysqlite 은 Python 2.5 이상에서 기본적으로 내장되어 있다.
pysqlite 를 import 하기 위해서는 "import sqlite3" 와 같이 import만 하면 된다.
파이썬 SQLite 라이브러리 불러오기 및 버전 확인
우선 라이브러리를 불러와서 “sqlite3 라이브러리”의 버전과 “SQLite(DB 엔진)” 버전을 각각 출력해보자.
DB 연결, 커서 획득
이제 진짜 DB를 생성하는 쿼리를 실행해보자.
일단 "test.db"라는 데이터베이스를 생성해봤다. 브라우저로 열어서 보면 잘 보일 거다. 엑셀에서 첫 행을 적어두었다 생각하면 된다.
c.execute("CREATE TABLE IF NOT EXISTS 테이블이름()")안에 문자열로 필드(열) 이름과 데이터 타입을 작성해주면 된다.
CREATE TABLE IF NOT EXITSTS 테이블_이름() 이라는 쿼리는 말 그대로 “테이블_이름이라는 테이블이 없으면 테이블을 생성해라”라는 의미다. 있으면 있는 걸 그대로 쓰는 거고. 그 안에 필드를 나열해주면 되는데 필드명 > 테이터 타입 순으로 입력한다. PRIMARY KEY는 테이블 내에 있는 레코드를 식별하는 고유 키를 말하며, 유일한 것이어야 한다.
개념 1. commit & rollback
위에서 sqlite3.connect() 괄호 안에 isolation_level=None이라고 명시했는데 이는 (실습을 위해) 쿼리문을 실행하여 DB에 즉시 반영, 즉시 자동 커밋을 하기 위함이다.
commit(커밋)은 “변경사항을 DB에 반영한다”는 뜻이라 commit을 하지 않으면 수정(추가/갱신/삭제 등) 작업에 대한 기록을 컴퓨터 메모리 같은 데 임시로 가지고 있을 뿐 실제로 DB에는 반영하지 않는다. 최종적으로 DB를 수정을 하려면 마지막에 반드시 conn.commit()이라는 명령을 실행해주어야 한다.
참고로 이것과 commit과 반대되는 개념으로 rollback(롤백)이 있다. 이전 이력으로 되돌린다는 뜻. conn.rollback()으로 명령한다.
개념 2. cursor
파이썬에서 파일을 읽고 쓰려면 커서를 가져와야 한다. 그래서 conn.cursor()로 일단 커서를 생성한다.
데이터 삽입하기
데이터 한 건을 넣으려면 c.execute(“INSERT INTO table1 VALUES()”)라고 해서 값을 직접 넣자.
테이블 안에 데이터가 들어간 걸 확인할 수 있다. 그런데 이렇게 하는 건 필드명과 순서를 정확히 알고 있다는 전제 하에 가능한 거다.
만약 정석으로 데이터를 삽입하려면 아래와 같이 튜플로 넣어주는 게 좋다.
이번엔 튜플이나 리스트 형태의 데이터 세트를 한 번에 삽입하는 방법도 알아야겠지. c.executemany()를 사용하면 된다.
끝이다. 리스트로도 가능하다.
데이터 불러오기
이제 데이터들이 잘 있나 확인해야겠지. 우선 데이터를 모두 선택한 다음에 c.fetchone()으로 하나씩 출력해보자.
c.fetchone()을 사용하면 한 줄씩 출력하는 걸 알 수 있다. 커서가 이동하기 때문이다. 그리고 이후에 c.fetchall()이라는 걸 사용해서 전체를 가져와서 출력하더라도 이미 읽은 지점 이후에 있는 것들만 출력된다. (참고로 fetch는 “가져오다”라는 뜻.)
그래서 만약 전체 데이터를 출력하고 싶다면 이렇게 전체를 다시 읽어 놓고 해야 한다.
그리고 이렇게 가져온 데이터는 리스트 형태로 출력되는 걸 알 수 있는데, 결국 반복문을 돌 수 있다는 뜻이다.
방법 2가 한 줄 덜 쓰긴 하지만 가독성이 떨어져서 차라리 방법 1이 나은 것 같다.
데이터 조회하기 (필터링)
원하는 데이터만 찾아서 가져올 수도 있어야겠지. SQL에서 WHERE 문을 써야 한다.
그런데 이때 방법이 이것저것 있다. 포매팅을 할 수도 있고, 딕셔너리 형식으로 설정해서 가져올 수도 있다. 좀 복잡하니 해보면서 익숙한 방법을 사용하면 된다.
여기서는 id라는 변수가 어떤 녀석인 것들만 선택해서 가져올지 짜봤다.
처음엔 좀 어렵지만, 익숙해지면 어렵지 않게 쓸 수 있겠지.
데이터 수정하기
위에서 조회할 때 사용한 WHERE 문과 함께 UPDATE를 통해 갱신하는 거다.
id가 무엇인 녀석을 찾아서 name을 새로운 걸로 고쳐보자. 이렇게.
편한 방법으로 사용하자.
데이터 삭제하기
테이블에 있는 특정 데이터를 지우려면 WHERE과 DELETE를 조합하면 된다.
만약 테이블에 있는 데이터 전체를 지우려면 conn.execute() 안에 쿼리문을 써주면 된다.
뒤에 rowcount를 붙여주면 지운 행 개수를 돌려준다.
DB 연결 해제
데이터베이스를 연결해서 이런저런 수정을 했으면 마지막엔 그 연결을 해제해야 한다. 그래서 항상 conn.close() 명령으로 마무리한다.
DB 백업하기 (dump)
데이터베이스는 항상 dump를 통해 백업을 해놓는 게 중요하다. 그래야 나중에 다른 PC에서도 이걸 그대로 재구성할 수 있다.
이래놓고 sql 파일을 열어보면 신기하게 아래와 같이 생겼다.
실제로 DB를 아예 재구성하는 SQL 쿼리들이 작성되어 있다.
'Python' 카테고리의 다른 글
파이썬 시작하기 (0) | 2022.01.03 |
---|---|
[Python] VSCode argument 설정 (1) | 2021.12.31 |
Python __main__ 이란 (0) | 2021.12.30 |
Introduction to Python (0) | 2021.12.28 |
pip package install SSL 인증서 Error 해결 (error: [SSL: CERTIFICATE_VERIFY_FAILED]) (0) | 2021.12.17 |