์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ (ํจ์บ ์์ ์ ๋ฆฌ)
<์ด์ ๊ธ>
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๋ฌธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ ํธ์ถ ๋๋ค.