๐ ๊ฐ์
์ ์ผ ์ฒ์ ์ฌ์ฉํด๋ณธ DB๋ SQLite ์ด๋ค. ๊ฐ๋จํ๊ฒ DB๋ฅผ ์ฌ์ฉํด๋ณด๊ธฐ๋ ๋ถ๋ด์ด ์๊ณ , python์์ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๋๋๋ DB์ด๊ธฐ๋ํ๊ณ ์ฌ์ฉํ๊ฒ ๋์๋ค. ์์ฃผ ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ์๋น์ค๋ฅผ ์ ์ํ๊ฑฐ๋ ํ ๋์๋ ์ฌ์ฉ๋ถ๊ฐํ ๊ฒ์ด๋ค..
๐น ์ฌ์ฉ๋ฒ
์์ํ๊ธฐ์ ์์, ๋์ผ๋ก DB์ ์์ฑ, ์ฝ๊ธฐ, ์์ , ์ญ์ ๋ฑ์ ํ์ธํ ์ ์๋๋ก ์ ๊ณตํ๊ณ ์๋ ํ๋ก๊ทธ๋จ์ด ์๋ค.
https://sqlitebrowser.org/ ์ด ๊ณณ์์ ๋ค์ด ๋ฐ์ผ๋ฉด๋๊ณ , ๊ท์ฐฎ์ผ๋ฉด command์ฐฝ์ sqlite3
๋ฅผ ์
๋ ฅํ๋ฉด ์ฌ์ฉํ ์ ์๊ธฐ์ ๊ตณ์ด ์์จ๋ ๋๋ค.
1๏ธโฃ DB ์ฐ๊ฒฐํ๊ธฐ (์์ฑํ๊ธฐ) ๋ฐ cursor ์์ฑ
python์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๋ ํ์์๋ค ๊ทธ๋ฅ ๋ฐ๋ก import ํ๋ฉด ๋๋ค!
import sqlite3
connect = sqlite3.connect("db๋ช
", isolation_level=None)
# isolation_level=None ์ ์คํ ์ปค๋ฐ ์ฌ์ฉ.
cur = connect.cursor()
cur.execute("select text from db")
DBํ์ผ์ด ์๋ค๋ฉด ๊ทธ DB์ ์ฐ๊ฒฐ๋ ๊ฒ์ด๊ณ , ์๋ค๋ฉด ์์ฑ๋ ๊ฒ์ด๋ค! ์ ์ผ ๋จผ์ DB๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์๋ ์ปค์๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ execute ํจ์๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด ์คํ์ํฌ ์ ์๋ค. ์ฟผ๋ฆฌ๋ฌธ์ ์ฃผ๋ก str ํ์ ๋ณ์๋ก ์์ฑํด ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ DB ์์ ์ commit ๋๋ rollback ์ ์ฌ์ฉํ๋ค. connect.commit()
์ ์์ ๋ ์ฌํญ์ DB์ ๋ฐ์ํ๋ ๊ฒ์ด๊ณ , connect.rollback
์ ์ด์ ์ผ๋ก ๋๋๋ฆฐ๋ค๋ ๋ป์ด๋ค. ์๋๋ ๋งค๋ฒ ์์ ํ ๋ฐ์์ ์ํด '๊ผญ!' commit์ ํด์ผํ์ง๋ง, ์์์ isolation_level=None
์ด์ฉํ๊ธฐ์, ์ํด๋ ๋๋ค.
โ command ์ฐฝ์ผ๋ก ์ด์ฉ์, .open (ํ์ผ๋ช
)
์ ์
๋ ฅํด DB์ ์ ๊ทผํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ์ ๋์ ๊ผญ ';'(์ธ๋ฏธ์ฝ๋ก )์ ๋ถ์ฌ์ค์ผ ํ๋ค.
2๏ธโฃ DB ๋ค๋ฃจ๊ธฐ
์์์ ์ ๊น ๋์จ ์ฟผ๋ฆฌ๋ฅผ ์คํ์ํค๋ cur.execute
๋ฅผ ์ด์ฉํด DB๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ค์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์๋ณด๊ฒ ๋ค.
1. Table ์์ฑํ๊ธฐ
cur.execute("CREATE TABLE (์ต์
:IF NOT EXISTS) (ํ
์ด๋ธ๋ช
:table1) \
((์ปฌ๋ผ:id) (ํ์
:integer) (ํค์ค์ :PRIMARY KEY), (์ปฌ๋ผ2:name) (ํ์
:text) ...")
- ํ
์ด๋ธ ๋ชฉ๋ก ์กฐํ ๋ฐฉ๋ฒ:
SELECT name FROM sqlite_master WHERE type='table';
- ํ
์ด๋ธ ๊ตฌ์กฐ ํ์ธ :
select * from sqlite_master where tbl_name='table๋ช ';
2. ๋ฐ์ดํฐ ์ฝ์ (CREATE)
INSERT INTO (ํ ์ด๋ธ๋ช ) VALUES (๊ฐ)
cur.execute("INSERT INTO testtable \
VALUES(1, 'dong')")
# ์ฌ๋ฌ ํ ์ฝ์
์
values_tuple = (
(3, 'hi'),
(4, 'hello'),
(5, 'annyeong')
)
cur.executemany("INSERT INTO table1(id, name) VALUES(?,?)", values_tuple)
ํ๋ฒ์ ์ฌ๋ฌ๋ฒ ํ๊ณ ์ถ์ผ๋ฉด executemany
๋ฅผ ์ฌ์ฉํ๋ค.
3. ๋ฐ์ดํฐ ์กฐํ (READ)
SELECT (ํ๋๋ช ) FROM (ํ ์ด๋ธ๋ช ) (WHERE(์กฐ๊ฑด์ ,์๋ต๊ฐ๋ฅ)) (์ปฌ๋ผ๋ช )='(๊ฐ)'
# ํ๋๋ช
์ *(์์ผ๋์นด๋)๋ฅผ ์ด์ฉํ์ฌ ํด๋น ํ
์ด๋ธ์ ๋ชจ๋ ํ ๋ถ๋ฌ์์ ๊ฐ์ ธ์จ ๊ฐ ์ถ๋ ฅ
cur.execute("SELECT * FROM testtable")
print(cur.fetchall())
# WHERE ์ ์ ์ฌ์ฉํ์ฌ ํํฐ๋ง ๊ฐ๋ฅ.
# ? ๋ฅผ ์จ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์๋ ์๊ณ ,
cur.execute("SELECT * FROM testtable=?", parameter)
# ๋ฌธ์์ด ํฌ๋ฉํ
๋ ๊ฐ๋ฅ
cur.execute("SELECT * FROM testtable={}".format(parameter))
# dictionary ํํ๋ก ๋ฐ์ ์๋ ์๊ณ ๋ค์ํ๊ฒ ๊ฐ๋ฅ..
SELECT ๋ฌธ์ ์ฌ์ฉํ์ฌ cur์ ๊ฐ์ด ์ค๋ฉด, cur.fetchone()
๋ฅผ ์จ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค. ๋ชจ๋ ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด cur.fetchall()
์ ์ฌ์ฉํ๋ฉด iterable ํ ๊ฐ์ฒด๊ฐ ๋ฐํ๋์ด for๋ฌธ์ ์ด์ฉํ์ฌ ๊ฐ์ ํ๋์ฉ ๊ฐ์ ธ์ฌ ์ ์๋ค.
4. ๋ฐ์ดํฐ ์์ (UPDATE)
UPDATE (ํ ์ด๋ธ๋ช ) SET (ํ๋๋ช )=(๊ฐ) (WHERE(์กฐ๊ฑด์ ))
cur.execute("UPDATE testtable SET name=? WHERE id=?", ('bye', 1))
# ๋๋
cur.execute("UPDATE testtable SET name=:name WHERE id=:id", {"name": 'bongju', 'id': 3})
5. ๋ฐ์ดํฐ ์ญ์ (DELETE)
DELETE FROM (ํ ์ด๋ธ๋ช ) (WHERE(์กฐ๊ฑด์ ))
cur.execute("DELETE FROM testtable WHERE id=?", (1))
# ์ด์ธ ๋ฑ๋ฑ..
cur.execute("DELETE FROM testtable WHERE id=:id", {'id': 3})
# where ์ ์๋ต์ ๋ชจ๋ ํ ์ง์
cur.execute("DELETE FROM testtable)
๋ชจ๋ ์์
์ด ๋๋๋ฉด connect.close()
์ฌ์ฉํด ์ฐ๊ฒฐ์ ํด์ ํด์ผ ํ๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์ด์์ผ๋ก SQLite์ ์ฌ์ฉ๋ฒ์ ์์๋ดค๋ค. SQLite๋ ๊ฑฐ์ ์ฐ์ง ์๋ DB๋ผ์ ์ฌ์ฉํ์ง ์์ ๊ฒ ๊ฐ์ง๋ง, SQL์ RDBMS์์๋ ๋ฌธ๋ฒ์ด ๋น์ท๋น์ทํ๋ ์ด์ฐธ์ ๊ฐ์ ์ตํ๋๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค! ํ ์คํธ ์ฉ๋๋ก๋ ์ฐ๊ธฐ๋ ํ๋๊น ์์๋์ผ๋ฉด ์ข์ง ์๊ฒ ๋๊ฐ~