[Python]SQLite DB

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()

 

댓글



Designed by JB FACTORY