DB를 생성해서 적당한 data를 저장 및 보관하고 있다면, 이제는 필요한 데이터를 연결 및 조회할 필요성이 존재합니다. 웹서비스 중 user정보 혹은 검색의 결과를 보여주기 위해서는 저장된 데이터를 불러와 필요에 따라 디자인을 거친 후 사람들에게 서비스되게 됩니다. SQlite3 DB에서 데이터를 조회하는 방법은 무엇일까요.
개인이 진행하는 프로젝트의 규모에 따라서 필요한 기능의 정도는 차이를 보일 수밖에 없습니다. 하지만, 데이터를 저장만 해서는 프로젝트를 완벽하게 마무리할 수 없을지도 모릅니다. DBt생성 및 데이터 저장방법은 아래 글이 도움이 될 수 있습니다.
SQlite3 데이터를 조회하는 방법
데이터를 조회한다는 것은 크게 두가지의 측면으로 구분할 수 있습니다. 첫 번째로 특정 테이블에 존재하는 모든 데이터를 불러들이는 것입니다. 두 번째는 특정 조건에 맞는 데이터를 찾아서 사용자 또는 프로그램에 제공하는 것입니다.
전자의 경우라면 테이블 또는 테이블 + 칼럼의 조합으로 확인할 수 있습니다. 후자의 경우라면 'WHERE' 이라는 조건문을 활용하면 쉽게 특정 값을 조회할 수 있습니다. 데이터의 위치를 나타낸다는 의미에서 where을 생각하면 기억하는데 도움이 될지도 모르겠네요.
- 조회를 시도한 테이블, 칼럼에 데이터가 없다면 'None'이라는 값이 반환되게 됩니다.
- 해당 조건을 활용하면 중복을 제거한 고유값만을 저장하는데 도움이 될 수 있습니다.
SQLite3 데이터 조회에 필요한 과정
데이터를 저회하기 앞서 글의 서두에 언급된 내용과 같이 DB를 생성하고, 테이블을 지정해두면 좋습니다. 실습을 위해서도 적당한 데이터를 가지고 있는 DB와 Table을 가지고 있어야만 보다 원활한 진행이 가능할 것입니다.
DB 생성 과정
- DB생성 코딩 > table 및 column 생성 > data 저장
DB에서 데이터 조회 과정
- 조회에 필요한 쿼리문을 커서를 통해 DB에 전달합니다.
- cursor.execute('쿼리문')
- 전달된 명령어에 의해 반환되는 신호를 저장된 데이터로 변환되어 가져옵니다.
- 하나의 경우 : cursor.fetchone()
- 둘 이상 다수의 경우 : cursor.fetchall()
전체 데이터 조회 예시
import sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
# test1 테이블 데이터 조회
sql = 'SELECT * FROM test1'
cur.execute(sql)
# 데이터 값의 출력 - 한개씩 순차적
result = cur.fetchone()
print(result)
# 데이터 값의 출력 - 다수를 한번에
result = cur.fetchall()
print(result)
SQLite3 DB에 저장되어 있는 데이터를 조회하고 우리가 알아볼 수 있도록 print를 통해서 출력하는 과정을 나타내고 있습니다. test 1이라는 테이블의 전체 데이터를 받아온 후, 출력되는 값을 하나씩 또는 한 번에 보여주는 과정입니다. 실제로 DB를 활용해본다면 쉽게 적용할 수 있을 것입니다.
SQLite3 특정 데이터를 조회하는 방법
위 코드에서 sql 변수에 담기는 쿼리문에 'WHERE'라는 조건을 달아주면 조회를 진행하는 사용자가 원하는 데이터를 추출할 수 있습니다. 예를 들어, 검색엔진에서 최신순, 정확도순 또는 날짜별로 검색결과를 보여주는 것과 비슷하다고 생각하면 됩니다.
‼ 다수의 데이터를 DB로 관리하고 원하는 정보를 보다 정확하고 빠르게 조회하기 위해서는 데이터를 저장하는 과정에서 적잘한 색인을 지정하는 것이 도움이 될 수 있습니다. 데이터별로 고유한 값을 칼럼을 통해 지정한다면 보다 빠르고 정확하게 조회가 가능합니다.
SQLite3 특정 데이터 조회 예시
<조건>
- 테이블명 : test1
- 칼럼명 : id, date, keyword
<예시>
- test 1 테이블에서 id가 3인 데이터를 조회하는 방법
sql = 'SELECT * FROM test1 WHERE id = "3"'
cur.execute(sql)
result = fetchone()
print(result)
기본적으로 데이터를 조회하는 쿼리 문의 시작인 SELECT에 WHERE 조건문을 추가한 것입니다. id라는 칼럼의 3이라는 값에 해당되는 데이터를 하나 출력하게 됩니다.
하나의 데이터를 조회한다고 해서 굳이 fetchone()을 사용할 필요는 없습니다. fetchall()을 사용해도 데이터의 조회는 가능하지만, 반환되는 값의 type이 달라지므로 원하는 값을 추출하기 위해서는 후속조치를 필요로 하게 됩니다. 따라서, 하나의 값이라면 fetchone()을 이요하는 것을 추천합니다.
위에서 언급한 방법은 가장 기본적으로 활용되는 where 조건문을 추가한 방법이며, 그 밖에도 다양한 조건절이 존재하게 됩니다. 우리가 주로 사용하는 검색엔진에도 사용자의 필요성을 충족시킬 수 있는 다양한 조건들이 존재한다는 것을 알 수 있습니다.
이와 마찬가지로 상상력을 발휘한다면 여러 조건들을 생각해 볼 수 있습니다. 어떤 게 있을까요. 아래와 같이 크게 3가지로 구분하여 생각해 볼 수 있습니다.
- 특정 위치(값)에 해당되는 데이터 조회
- 특정 위치(값)와 같지 않은 데이터 조회
- 조건보다 크다, 작다, 이상, 이하, 사이에 해당되는 데이터 조회
# WHERE를 추가한 쿼리문의 형태
SELECT * FROM test1 WHERE id = 1
SELECT * FROM test1 WHERE id < 1
SELECT * FROM test1 WHERE id > 1
SELECT * FROM test1 WHERE id <= 1
SELECT * FROM test1 WHERE id >= 1
SELECT * FROM test1 WHERE id <> 1
SELECT * FROM test1 WHERE id > 1 and keyword = '지금'
SELECT * FROM test1 WHERE id > 1 or keyword = '지금'
# 특정 테이블의 칼럼에서 범위를 지정하여 데이터를 조회하는 방법
SELECT * FROM test1 WHERE id BETWEEN 1 and 2
위 코드와 같이 WHERE 조건절에 대한 연산자를 활용하여 원하는 범위 혹은 조건에 맞는 데이터를 추출할 수 있습니다. 쿼리문은 소문자 대문자를 구분하지 않기 때문에 소문자를 활용하여 전달해도 동일한 결괏값을 얻을 수 있습니다.
'▶ Project_Python > ◾ DB' 카테고리의 다른 글
파이썬 SQLite3를 이용한 실습 (0) | 2021.10.04 |
---|---|
SQlite3를 이용한 파이썬 DB 활용하기(DB생성, 저장 방법) (0) | 2021.10.04 |
파이썬 프로젝트를 진행할 때 필요한 DB(database) 어떤 것으로 선택하는 것이 좋을까. (0) | 2021.10.03 |
댓글