Codong's Development Diary RSS 태그 관리 글쓰기 방명록
DB (1)
2021-02-24 20:27:35

👋 개요


제일 처음 사용해본 DB는 SQLite 이다. 간단하게 DB를 사용해보기도 부담이 없고, python에서 기본으로 연동되는 DB이기도하고 사용하게 되었다. 아주 소량의 데이터를 관리할 때 쓰이기 때문에 실제 서비스를 제작하거나 할 때에는 사용불가할 것이다..


🕹 사용법


시작하기에 앞서, 눈으로 DB의 생성, 읽기, 수정, 삭제 등을 확인할 수 있도록 제공하고 있는 프로그램이 있다.

https://sqlitebrowser.org/ 이 곳에서 다운 받으면되고, 귀찮으면 command창에 sqlite3 를 입력하면 사용할 수 있기에 굳이 안써도 된다.


1️⃣ DB 연결하기 (생성하기) 및 cursor 생성

python에서는 라이브러리 설치도 필요없다 그냥 바로 import 하면 된다!

import sqlite3
connect = sqlite3.connect("db명", isolation_level=None)
# isolation_level=None 시 오토커밋 사용.

cur = connect.cursor()

cur.execute("select text from db")

DB파일이 있다면 그 DB와 연결될 것이고, 없다면 생성될 것이다! 제일 먼저 DB를 다루기 위해서는 커서를 생성한다. 그리고 execute 함수를 이용해 쿼리문을 작성해 실행시킬 수 있다. 쿼리문은 주로 str 타입 변수로 작성해 사용한다.

그리고 DB 수정시 commit 또는 rollback 을 사용한다. connect.commit()은 수정된 사항을 DB에 반영하는 것이고, connect.rollback은 이전으로 되돌린다는 뜻이다. 원래는 매번 수정 후 반영을 위해 '꼭!' commit을 해야하지만, 위에서 isolation_level=None 이용했기에, 안해도 된다.

➕ command 창으로 이용시, .open (파일명) 을 입력해 DB에 접근한다. 그리고 쿼리문 작성시 끝에 꼭 ';'(세미콜론)을 붙여줘야 한다.


2️⃣ DB 다루기


위에서 잠깐 나온 쿼리를 실행시키는 cur.execute를 이용해 DB를 다루는 방법들을 본격적으로 알아보겠다.


1. Table 생성하기

cur.execute("CREATE TABLE (옵션:IF NOT EXISTS) (테이블명:table1) \
    ((컬럼:id) (타입:integer) (키설정:PRIMARY KEY), (컬럼2:name) (타입:text) ...")
  • 테이블 목록 조회 방법:SELECT name FROM sqlite_master WHERE type='table';
  • 테이블 구조 확인 : select * from sqlite_master where tbl_name='table명';

2. 데이터 삽입 (CREATE)

INSERT INTO (테이블명) VALUES (값)

cur.execute("INSERT INTO testtable \
    VALUES(1, 'dong')")

# 여러 행 삽입시
values_tuple = (
    (3, 'hi'),
    (4, 'hello'),
    (5, 'annyeong')
)
cur.executemany("INSERT INTO table1(id, name) VALUES(?,?)", values_tuple) 

한번에 여러번 하고싶으면 executemany 를 사용한다.


3. 데이터 조회 (READ)

SELECT (필드명) FROM (테이블명) (WHERE(조건절,생략가능)) (컬럼명)='(값)'

# 필드명에 *(와일드카드)를 이용하여 해당 테이블에 모든 행 불러와서 가져온 값 출력
cur.execute("SELECT * FROM testtable")
print(cur.fetchall())

# WHERE 절을 사용하여 필터링 가능.
# ? 를 써서 파라미터를 받을 수도 있고,
cur.execute("SELECT * FROM testtable=?", parameter)

# 문자열 포메팅도 가능
cur.execute("SELECT * FROM testtable={}".format(parameter))
# dictionary 형태로 받을 수도 있고 다양하게 가능..

SELECT 문을 사용하여 cur에 값이 오면, cur.fetchone()를 써서 값을 가져온다. 모든 값을 가져오려면 cur.fetchall()을 사용하면 iterable 한 객체가 반환되어 for문을 이용하여 값을 하나씩 가져올 수 있다.


4. 데이터 수정 (UPDATE)

UPDATE (테이블명) SET (필드명)=(값) (WHERE(조건절))

cur.execute("UPDATE testtable SET name=? WHERE id=?", ('bye', 1))
# 또는 
cur.execute("UPDATE testtable SET name=:name WHERE id=:id", {"name": 'bongju', 'id': 3})

5. 데이터 삭제 (DELETE)

DELETE FROM (테이블명) (WHERE(조건절))

cur.execute("DELETE FROM testtable WHERE id=?", (1))

# 이외 등등..
cur.execute("DELETE FROM testtable WHERE id=:id", {'id': 3})

# where 절 생략시 모든 행 지움
cur.execute("DELETE FROM testtable)

모든 작업이 끝나면 connect.close() 사용해 연결을 해제해야 한다.


👋 마무리


이상으로 SQLite의 사용법을 알아봤다. SQLite는 거의 쓰지 않는 DB라서 사용하지 않을 것 같지만, SQL은 RDBMS에서는 문법이 비슷비슷하니 이참에 감을 익혀두는 것도 좋은 것 같다! 테스트 용도로도 쓰기도 하니까 알아놓으면 좋지 않겠는가~


reference