[Python]SQLite DB
- archive
- 2020. 1. 4. 13:41
sqilite3를 import 해준다.
import sqlite3
Python에서 SQL문을 실행하고 나서 conn.commit()을 호출 해줘야 하는데, isolation_leve=None으로 지정해 주면 auto commit이 되어 따로 commit()을 호출 하지 않아도 된다.
#DB 생성 및 Auto Commit()
conn = sqlite3.connect('db파일의 경로', isolation_level=None)
데이터 삽입
#Cursor
c = conn.cursor()
#테이블 생성 (Data Type : TEXT, NUMERIC INTEGER REAL BLOB)
c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, \
email text, phone text, website text)")
#데이터 삽입
c.execute("INSERT INTO users VALUES(1, 'Kim', 'Kim@naver.com', '010-0000-0000', 'Kim.com'))
c.execute("INSERT INTO users (id, username, email, phone, website) VALUES (?,?,?,?,?)",\
(2, 'Park', 'Park@naver.com', '010-1234-5678', 'Kim.com'))
# 여러 데이터 삽입 (튜플, 리스트)
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com'),
(4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com'),
(5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net')
)
c.executemany("INSERT INTO users (id, username, email, phone, website) \
VALUE (?,?,?,?,?)", userList)
데이터 조회
# 커서 바인딩
c = conn.cursor()
# 데이터 조회 (전체)
c.execute("SELECT * FROM users")
#커서는 데이터를 가져오면서 위치가 변경 된다.
c.fetchone()
#커서 인덱스 1
c.fetchmany(size=3)
#커서 인덱스 4
c.fetchall()
#4부터 나머지 데이터 row들을 다 가져옴.
모든 데이터를 가져오는 방법에는 두가지가 있다. cursor의 fetchall()을 호출 하는 방법 그리고 cursor로 직접 sql문을 실행 해서 데이터 리스트를 얻는 방법 이렇게 두가지가 있다.
for row in c.fetchall():
print(row)
for row in c.execute('SELECT * FROM users ORDER BY id desc'):
print(row)
※WHERE 사용하기
아래와 같은 코드를 실행하면 id 값이 3인 row가 출력되는 것을 볼 수 있다.
param = (3,)
c.execute('SELECT * FROM users WHERE id = ?', param)
print('param', c.fetchone())
param = 4
c.execute('SELECT * FROM users WHERE id = "%s"' % param2)
param = 4
c.execute('SELECT * FROM users WHERE id = :Id', {"Id": 5})
하나의 id뿐 아니라 여러 id를 가지고 오고 싶다면 IN을 사용하면 된다.
param = (3,5)
c.execute("SELECT * FROM users WHERE id IN (?,?)", param)
c.execute("SELECT * FROM users WHERE id IN ('%d','%d')", (3,4))
Dictionary를 사용하려면 OR을 이용한다.
c.execute("SELECT * FROM users WHERE id = :id1 OR id=:id2", {"id1": 2, "id2": 5})
데이터 수정 및 삭제
데이터 수정
c.execute("UPDATE users SET username = ? WHERE id = ?", ('niceman', 2))
conn.commit()
c.execute("UPDATE users SET username = :name WHERE id = :id", {"name" L 'goodman', "id" : 5})
conn.commit()
c.execute("UPDATE users SET username = '%s' WHERE id = '%s'" % ('badboy', 3))
conn.commit()
데이터 삭제
c = conn.cursor()
c.execute("DELETE FROM users WHERE id = ?", (2,))
conn.commit()
c.execute("DELETE FROM users WHERE id = :id", {"id" : 5})
conn.commit()
c.execute("DELETE FROM users WHERE id = '%s'" % 4)
conn.commit()
전체 데이터 삭제
conn.execute("DELETE FROM users")
마지막으로 db을 다 사용했다면 close()를 호출하여 db를 닫아주어야 한다.
conn.close()
'archive' 카테고리의 다른 글
[Android] Navigation (0) | 2020.01.10 |
---|---|
[Android] 화면 전환에 따라 UI 대응 (0) | 2020.01.09 |
[Python]Print() (0) | 2019.12.31 |
Retrofit에 대해 Naver API 사용 (0) | 2019.12.27 |
ViewModel과 Databinding 그리고 Recyclerview (1) | 2019.12.27 |