본문 바로가기
대학원 공부/programming language

Python : SQLite : SQLite 란?

by 월곡동로봇팔 2019. 11. 19.

Why?


sqlite는 embedded (내장된) database 소프트웨어로, 웹브라우저 같이 application software안에 local/client storage이다.

 

 

기본 기능


  • CRATE TABLE
# table 생성
CREATE TABLE extract_urls(title text, url text, user_count INTEGER DEFAULT 1, visit_count INTEGER)

# table이 없을 경우 생성
CREATE TABLE IF NOT EXISTS extract_urls(title text, url text, user_count INTEGER, visit_count INTEGER)

DEFAULT는 그 곳에 다른 값을 주지 않는다면, default 기본값으로 1을 준다는 의미이다.

이외에도 NOT NULL, UNIQUE, CHECK가 존재한다. 아래 link에 자세히 나온다.

https://thinking-jmini.tistory.com/19

 

[SQLite] 테이블 제약 조건

보통 테이블 스키마를 작성한 사람과 해당 테이블의 데이터를 입력하고 사용하는 사용자가 다른 경우가 많다. 그렇기에 우리는 최초 테이블 스키마를 작성할 때의 의도와 다르게 사용하는 경우가 많이 생기며 이로..

thinking-jmini.tistory.com

 

  • SELECT, WHERE, EXCEPT
SELECT title, url, user_count, visit_count from History_all_users
WHERE url in (SELECT url from sorted_urls where title_token = '"+token+"' 
EXCEPT SELECT url from History_"+user_name+"_temp.urls) ORDER by user_count DESC
    

SELECT 뒤에는 선택할 column을 입력한다.

이 때 * 을 써서 모두 가져올 수 있지만, 우리는 query만 보고 어떤 column을 가져오는지 알 수 있기에, *은 지양한다.

 

FROM은 History_all_users 라는 table안에서 가져온다. 이는 같은 db 파일에서 존재한다.

만약 다른 db 파일에서 가져오려한다면, 우리는 ATTACH를 써서 받을 것이다. 이는 뒤에서 설명할 예정이다.

 

SELECT는 WHERE을 통해서 조건을 줄 수 있다. 그대로 해석하면, in 뒤에서  선택한 부분에 History_all_users의 url을 고른다.

 

EXCEPT는 차집합 연산으로, 합집합(UNION), 교집합(INTERSECTION), 차집합(EXCEPT)으로 3가지가 존재한다.

차집합의 경우는 오른쪽의 data가 있는 부분을 왼쪽 data에서 제거한 후, 왼쪽 data를 보여준다.

 

아래 링크에 자세히 나와있다.

https://aroundck.tistory.com/5203

 

[SQLite3] 06. 임베디드 SQLite3 최적화 #1

[SQLite3] 06. 임베디드 SQLite3 최적화 #1 이 글은 "빠르게 활용하는 모바일 데이터베이스 SQLite3” 이란 글을 보며 필요한 내용만 정리한 글입니다. 자세한 내용은 책을 구매해서 보세요 - SQLite3 이 주로 임..

aroundck.tistory.com

  • INSERT
# 이는 sqlite3을 python에서 구현할 때 주로 사용.

# Insert 하나만
c1.execute("INSERT INTO extract_urls(title, url, user_count ,visit_count) VALUES (?,?,?,?)", (1,2,3,4))

# Insert 여러번
c1.executemany("INSERT INTO extract_urls(title, url, user_count ,visit_count) VALUES (?,?,?,?)", result)

INSERT는 row에 값을 추가하는 것을 말한다.

 

query문에서는 VALUES ( )안에 직접 넣어야 하지만, python에서 구현할 때는, ( ) 안에 ?을 해놓고 값을 입력한다. 

 

python에서는 여러번 execute 가능하다. 따라서 executemany로 튜플형태를 한 번에 입력이 가능하다.

 

 

  • ATTACH
c.execute("ATTACH './History_all_users.db' as History_all_users_temp;")

 

현재 경로에 있는 db 파일에서 다른 db 파일'을 as table_name으로 가져올 수 있다.

다른 db 파일을 이어주는 역할이라고 생각하면 좋다.

 

 

  • UPDATE
c1.execute("update urls SET user_count = user_count + 1 where url = 'www.google.co.kr'")

update는 특정한 조건인 곳에 값을 업데이트를 한다.

 

update table 이름 SET column = 연산 (where로 조건을 줄 수 있다.)

 

 

 

아래는 python.org에서 제공하는 기본 REFERENCE

https://docs.python.org/ko/3/library/sqlite3.html

 

sqlite3 --- SQLite 데이터베이스용 DB-API 2.0 인터페이스 — Python 3.8.0 문서

바로 가기 메서드 사용하기 Connection 객체의 비표준 execute(), executemany() 및 executescript() 메서드를 사용하면, (종종 불필요한) Cursor 객체를 명시적으로 만들 필요가 없으므로, 코드를 더 간결하게 작성할 수 있습니다. 대신, Cursor 객체가 묵시적으로 만들어지며 이러한 바로 가기 메서드는 커서 객체를 반환합니다. 이런 방법으로, Connection 객체에 대한 단일 호출만 사용하여 SELECT 문을

docs.python.org

 

댓글