์ฝ”๋“œ - ํŒจ์บ  ์ˆ˜์—… ์ฝ”๋“œ ์ฐธ๊ณ  (ํŒจ์บ  ์ˆ˜์—… ์ •๋ฆฌ)

 

 

<์ด์ „ ๊ธ€>

https://silvercoding.tistory.com/45

 

[python ๊ธฐ์ดˆ] 13. SQLITE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ (1) - ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ์‚ฝ์ž… ์‚ญ์ œ

์ฝ”๋“œ - ํŒจ์บ  ์ˆ˜์—… ์ฝ”๋“œ ์ฐธ๊ณ  (ํŒจ์บ  ์ˆ˜์—… ์ •๋ฆฌ) <์ด์ „ ๊ธ€> https://silvercoding.tistory.com/44 https://silvercoding.tistory.com/43 https://silvercoding.tistory.com/42 https://silvercoding.tistory.com/41..

silvercoding.tistory.com

 

* sqlite3 import 

import sqlite3

 

 

* DB ํŒŒ์ผ ์กฐํšŒ (์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ) 

conn = sqlite3.connect('./resource/database.db') # ๋ณธ์ธ DB ๊ฒฝ๋กœ

 

 

* ์ปค์„œ ๋ฐ”์ธ๋”ฉ

c = conn.cursor()

 

 

* ํ…Œ์ด๋ธ” ์กฐํšŒ 

(1) ์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ 

c.execute('SELECT * FROM users')

์ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ฌด์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ด์ œ ์ด ์ƒํƒœ์—์„œ ์ปค์„œ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•ด๊ฐ€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

(2) ์ปค์„œ ์œ„์น˜ ๋ณ€๊ฒฝ 

- 1๊ฐœ ๋กœ์šฐ ์„ ํƒ 

print('One -> \n', c.fetchone())

 One -> (1, 'Kim', 'silver@naver.com', '010-0000-0000', 'kim.com', '2021-08-03 13:28:23') 

fetchone()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ•œ๊ฐœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

- ์ง€์ • ๋กœ์šฐ ์„ ํƒ 

print('Three -> \n', c.fetchmany(size=3))

 Three -> [(2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', '2021-08-03 13:28:23'), 
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23'), (4, 
'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23')] 

fetchmany()์˜ ์ธ์ž์— size ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•ด์ฃผ๋ฉด ์ปค์„œ์˜ ํ˜„์žฌ ์œ„์น˜๋ถ€ํ„ฐ size๊ฐœ์ˆ˜ ๋งŒํผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ์ „์ฒด ๋กœ์šฐ ์„ ํƒ 

print('All -> \n', c.fetchall())

 All -> [(5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23')]  

fetchall() ๋กœ ํ˜„์žฌ ์ปค์„œ์˜ ์œ„์น˜ ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

print('All -> \n', c.fetchall())

 All -> [] 

5๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์กฐํšŒํ–ˆ์œผ๋ฏ€๋กœ ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค! 

 

 

 

์ปค์„œ์˜ ์œ„์น˜๊ฐ€ ๋๋‚˜๋ฉด ์‹คํ–‰์ด ์•ˆ๋˜๋ฏ€๋กœ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด๊ฐ€๋ฉฐ ์‹คํ–‰ ํ•œ๋‹ค. 

(3) ์ˆœํšŒ 

- ์ˆœํšŒ 1 

rows = c.fetchall()
for row in rows: 
    print('retrieve1 > ', row)

 retrieve1 >  (1, 'Kim', 'silver@naver.com', '010-0000-0000', 'kim.com', '2021-08-03 13:28:23') 
 retrieve1 >  (2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', '2021-08-03 13:28:23') 
 retrieve1 >  (3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23') 
 retrieve1 >  (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23') 
 retrieve1 >  (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23') 

fetchall()์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ชฉ๋ฌธ์œผ๋กœ ์ˆœํšŒํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ์ˆœํšŒ 2 

for row in c.fetchall():
    print('retrieve2 > ', row)

 retrieve2 >  (1, 'Kim', 'silver@naver.com', '010-0000-0000', 'kim.com', '2021-08-03 13:28:23') 
 retrieve2 >  (2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', '2021-08-03 13:28:23') 
 retrieve2 >  (3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23') 
 retrieve2 >  (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23') 
 retrieve2 >  (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23') 

์ˆœํšŒ 1 ๊ณผ ๊ฐ™์ง€๋งŒ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์ง€ ์•Š์•˜์„ ๋ฟ์ด๋‹ค. 

 

 

- ์ˆœํšŒ 3 : ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ 

for row in c.execute('SELECT * FROM users ORDER BY id desc'):
    print('retrieve3 > ', row)

 retrieve3 >  (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23') 
 retrieve3 >  (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23') 
 retrieve3 >  (3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23') 
 retrieve3 >  (2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', '2021-08-03 13:28:23') 
 retrieve3 >  (1, 'Kim', 'silver@naver.com', '010-0000-0000', 'kim.com', '2021-08-03 13:28:23') 

fetchall()์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  execute๋กœ ๋ฐ”๋กœ ์ˆœํšŒํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฒˆ์—” ORDER BY ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜์—ฌ ์ˆœํšŒํ–ˆ๋‹ค. 

 

 

 

(4) WHERE Retrieve 

- ๋ฐฉ๋ฒ• 1 : ํŠœํ”Œ

param1 = (3,)
c.execute('SELECT * FROM users WHERE id=?', param1)
print('param1', c.fetchone())
print('param1', c.fetchall()) # ๋ฐ์ดํ„ฐ ์—†์Œ

 param1 (3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23') 
 param1 [] 

WHERE์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. execute์˜ ์ธ์ž์— ํŠœํ”Œ๋กœ id๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

 

 

- ๋ฐฉ๋ฒ• 2 : format 

param2 = 4
c.execute('SELECT * FROM users WHERE id="%s"' % param2)  # %s, %f, %d
print('param2', c.fetchone())
print('param2', c.fetchall()) # ๋ฐ์ดํ„ฐ ์—†์Œ

 param2 (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23')

 param2 [] 

% ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ id๊ฐ’์„ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

- ๋ฐฉ๋ฒ• 3 : dictionary 

c.execute('SELECT * FROM users WHERE id=:Id', {"Id":5})
print('param3', c.fetchone())
print('param3', c.fetchall()) # ๋ฐ์ดํ„ฐ ์—†์Œ

 param3 (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23') 
 param3 [] 

execute์˜ ์ธ์ž์— dictionary๋ฅผ ์ž‘์„ฑํ•˜๊ณ , key๊ฐ’์„ ์ผ์น˜์ง€์ผœ ์ค€๋‹ค. 

 

 

- ๋ฐฉ๋ฒ• 4 : IN & tuple

param4 = (3, 5)
c.execute('SELECT * FROM users WHERE id IN(?,?)', param4)
print('param4', c.fetchall())

 param4 [(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08- 03 13:28:23'), (5, 'Yoo', 'Yoo@google.com',  '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23')] 

IN ๊ณผ ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ๋ฐฉ๋ฒ• 5 : IN & format

c.execute('SELECT * FROM users WHERE id IN("%d", "%d")' % (3, 4))
print('param5', c.fetchall())

 param5 [(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', '2021-08-03 13:28:23'), (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', '2021-08-03 13:28:23')]  

IN๊ณผ % ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

- ๋ฐฉ๋ฒ• 6 : OR & dictionary

c.execute('SELECT * FROM users WHERE id=:id1 OR id=:id2', {'id1':2, 'id2':5})
print('param6', c.fetchall())

 param6 [(2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', '2021-08-03 13:28:23'), (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', '2021-08-03 13:28:23')] 

OR๊ณผ ์ธ์ž์— dictionary์— key๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 

 

 

 

(5) Dump ์ถœ๋ ฅ ( ์ค‘์š”! ) 

with conn:
    with open('./resource/dump.sql', 'w') as f:
        for line in conn.iterdump():
            f.write('%s\n' % line)
        print('Dump print Complete')

 Dump print Complete 

์ด๋ ‡๊ฒŒ ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ๊ฐ’ ์‚ฝ์ž… ์—ฐ์‚ฐ๋“ค์„ ํ•œ ๋ฒˆ์— ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ ๋œ๋‹ค. 

 

 

 

(6) ์—ฐ๊ฒฐ ํ•ด์ œ

* f.close(), conn.close() : with๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ํ˜ธ์ถœ ๋œ๋‹ค. 

 

 

 

 

+ Recent posts