SQLite?
- ์๋ฒ ํ์์์ด DB์ ํ์ผ์ ๊ธฐ์ดํ์ฌ DB ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์๋ฒ ๋๋ SQL DB ์์ง
- ๋ณ๋์ ์ค์น์์ด ์ฌ์ฉํ ์ ์์
- Mac OS ๋ Linux์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์์
- ํ์ด์ฌ์ ๋ฒ์ 2.5์ด์์ผ ๊ฒฝ์ฐ ๋ชจ๋์ด ๊ธฐ๋ณธ ๋ด์ ๋์ด ์์
1. ํ์ด์ฌ๊ณผ DB๋ฅผ ์ฐ๊ฒฐ
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path) #mydb.db์ ์ฐ๊ฒฐ
- DB ์ด๋ฆ์ ์ ํ์ฌ ์
๋ ฅ
- ์ ์ฝ๋์ ๊ฒฝ์ฐ mydb.db ํํ๋ก ์ ์ฅ
2. Cursor ๊ฐ์ฒด
c = conn.cursor()
- conn ๊ฐ์ฒด๋ SQL ์ฐ๊ฒฐ๊ณผ ๊ด๋ จ๋ ์
ํ
์ด ํฌํจ๋์ด ์์
- Cursor ๊ฐ์ฒด๋ Connect()ํจ์์ ์ฐ๊ฒฐ์ ์ฌ์ฉ
- Cursor ๊ฐ์ฒด
- SQL ์ง์(Query)๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ด๋ฅด ์ป๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด
- Insert์ฒ๋ผ DB์๋ง ์ ์ฉ๋๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ Select ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ๋๋ SQL ์ง์ ์ํ ๊ฒฐ๊ณผ์ ์ ๊ทผํ๊ธฐ ์ํ Cursor๊ฐ ๋ฐ๋์ ํ์
- conn.coursor() ์ฌ์ฉ์ ์ต๊ดํ ํ์
3. SQL๋ฌธ ์คํ
# stocks์ด๋ผ๋ ์ด๋ฆ์ ํ
์ด๋ธ์ ํ๋ ์์ฑ
c.execute("CREATE TABLE IF NOT EXISTS stocks (date text, trans text, symbol text, qty real, price real)")
# stocks ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ insert
c.execute("INSERT INTO stocks VALUES ('20200701', 'TEST', 'AIFFEL', 1, 10000)")
# ๋ฐฉ๊ธ insertํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด ๋ด
๋๋ค.
c.execute("SELECT * FROM stocks")
# ์กฐํ๋ ๋ด์ญ์ ์ปค์๋ฅผ ํตํด ๊ฐ์ ธ์ ์ถ๋ ฅํด ๋ด
๋๋ค.
print(c.fetchone())
4. conn.commit()
- SQL์ง์๊ฐ ๋๋ฌ๋ค๋ฉด conn.commit() ๋ฅผ ํธ์ถํด์ DB๊ฐ ์ค์ ๋ก update
conn.commit() # commit()์ cursor์ ๋ฉ์๋๊ฐ ์๋๋ผ connection์ ๋ฉ์๋
- commit()์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฐ์๋จ
- ์ด๋ฐ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํธ๋์ญ์
(transation) ๊ด๋ฆฌ ๋ผ๊ณ ํจ
- ํธ๋์ฌ์
์ด๋?
- ์ชผ๊ฐ์ง๋ฉด ์๋๋ ์
๋ฌด ๋จ์
- ex) ์จ๋ผ์ธ ์ผํ์์์ ๊ฒฐ์ ์๋ฃ์ ์ํ๋ฐฐ์ก์ฒ๋ฆฌ๊ฐ ์ชผ๊ฐ์ ธ์๋ ์๋จ
5. DB์ ์ฐ๊ฒฐ ๋๊ธฐ
c.close() # ๋จผ์ ์ปค์๋ฅผ ๋ซ์ ํ
conn.close() # DB ์ฐ๊ฒฐ์ ๋ซ์ ์ค๋๋ค.
- commit()์ ์๋ฃํ๋ค๋ฉด DB์ ์ฐ๊ฒฐ ๋๊ธฐ
6. DDL ๋ฌธ์ผ๋ก ํ
์ด๋ธ ์์ฑ
import sqlite3
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path)
c = conn.cursor()
#- ! ์ฌ์คํ ์ ํ
์ด๋ธ์ด ์กด์ฌํ ์ ์์ผ๋ฏ๋ก ์๋์ฒ๋ผ ํด๋น ํ
์ด๋ธ๋ค์ ๋ชจ๋ ์ง์์ค๋๋ค.
c.execute("DROP TABLE IF EXISTS ๋์๋์ถ๋ด์ญ")
c.execute("DROP TABLE IF EXISTS ๋์๋์ถ๋ด์ญ2")
c.execute("DROP TABLE IF EXISTS ๋์ถ๋ด์ญ")
c.execute("DROP TABLE IF EXISTS ๋์๋ช
")
#----- 1st table : ๋์๋์ถ๋ด์ญ -----#
c.execute("CREATE TABLE IF NOT EXISTS ๋์๋์ถ๋ด์ญ (ID varchar, ์ด๋ฆ varchar, ๋์ID varchar, ๋์ถ์ผ varchar, ๋ฐ๋ฉ์ผ varchar)")
#- ์์ฑ(create)๋ฌธ : ํ
์ด๋ธ๋ช
, ๋ณ์๋ช
, ๋ณ์ํ์
์ ์ง์
data = [('101','๋ฌธ๊ฐํ','aaa','2020-06-01','2020-06-05'),
('101','๋ฌธ๊ฐํ','ccc','2020-06-20','2020-06-25'),
('102','๊ณ ๋ฌธ์','bbb','2020-06-01',None),
('102','๊ณ ๋ฌธ์','ddd','2020-06-08',None),
('103','๋ฌธ์ํ','ccc','2020-06-01','2020-06-05'),
('104','๊ฐ๊ธฐ๋ฅ',None,None,None)]
#- ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์
๋ ฅ (๋ณ์๋ช
์์ ๊ธฐ์ค๋๋ก)
c.executemany('INSERT INTO ๋์๋์ถ๋ด์ญ VALUES (?,?,?,?,?)', data)
#- ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ
์ด๋ธ์ insertํ๊ธฐ
#-----------------------------------------------#
#----- 2nd table : ๋์๋์ถ๋ด์ญ2 -----#
c.execute("CREATE TABLE IF NOT EXISTS ๋์๋์ถ๋ด์ญ2 (ID varchar, ์ด๋ฆ varchar, ๋์ถ๋
์ varchar, ๋์ถ์ผ์ varchar)")
data = [('101','๋ฌธ๊ฐํ','2020-06','20์ผ'),
('102','๊ณ ๋ฌธ์','2020-06','10์ผ'),
('103','๋ฌธ์ํ','2020-06','8์ผ'),
('104','๊ฐ๊ธฐ๋ฅ','2020-06','3์ผ')]
c.executemany('INSERT INTO ๋์๋์ถ๋ด์ญ2 VALUES (?,?,?,?)', data)
#--------------------------------------------------#
#----- 3rd table : ๋์ถ๋ด์ญ -----#
c.execute("CREATE TABLE IF NOT EXISTS ๋์ถ๋ด์ญ (ID varchar, ์ด๋ฆ varchar, ๋์ID varchar)")
data = [('101','๋ฌธ๊ฐํ','aaa'),
('102','๊ณ ๋ฌธ์','bbb'),
('102','๊ณ ๋ฌธ์','fff'),
('103','๋ฌธ์ํ','ccc'),
('104','๊ฐ๊ธฐ๋ฅ',None)]
c.executemany('INSERT INTO ๋์ถ๋ด์ญ VALUES (?,?,?)', data)
#-----------------------------------------#
#----- 4th table : ๋์๋ช
-----#
c.execute("CREATE TABLE IF NOT EXISTS ๋์๋ช
(๋์ID varchar, ๋์๋ช
varchar)")
data = [('aaa','์
๋ชฝ์ ๋จน๊ณ ์๋ ์๋
'),
('bbb','์ข๋น์์ด'),
('ccc','๊ณต๋ฃก๋ฐฑ๊ณผ์ฌ์ '),
('ddd','๋นจ๊ฐ๊ตฌ๋'),
('eee','์ ์๋ ์ฒ์์ ๋ฏธ๋
')]
c.executemany('INSERT INTO ๋์๋ช
VALUES (?,?)', data)
#--------------------------------------#
conn.commit()
conn.close()
print("๋ฟ
๐")
c.execute("CREATE TABLE IF NOT EXISTS ๋์๋ช
(๋์ID varchar, ๋์๋ช
varchar)")
- ๋์๋ช
์์ CREATE TABLE IF NOT EXISTS ๋์๋ช
(๋์ID varchar, ๋์๋ช
varchar) ์ ๋ง์ฝ ํ
์ด๋ธ์ด ์กด์ฌํ์ง ์๋๋ค๋ฉด ํ
์ด๋ธ์ ์์ฑ, ๊ทธ ๋ ๋ณ์๋ช
๊ณผ ๊ฐ ๋ณ์ ํ์
์ ์ง์
data = [('aaa','์
๋ชฝ์ ๋จน๊ณ ์๋ ์๋
'),
('bbb','์ข๋น์์ด'),
('ccc','๊ณต๋ฃก๋ฐฑ๊ณผ์ฌ์ '),
('ddd','๋นจ๊ฐ๊ตฌ๋'),
('eee','์ ์๋ ์ฒ์์ ๋ฏธ๋
')]
- ๊ฐ ๋ณ์๋ช
์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์์ฑ
c.executemany('INSERT INTO ๋์๋ช
VALUES (?,?)', data)
- INSERT INTO ๋์๋ช
VALUES (?,?) ๊ฐ ํ
์ด๋ธ ๋ณ์์ ์
๋ ฅํ ๋ฐ์ดํฐ๋ค์ ๋ฃ๊ฒ ๋ค๋ ๋ป
- ? ๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌ์ ๋ฐ์ธ๋ฉ
- c.executemany() ๋ฉ์๋ : ํ๊บผ๋ฒ์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ์กฐํ
conn = sqlite3.connect(db_path)
c = conn.cursor()
for row in c.execute('SELECT * FROM ๋์๋ช
'):
print(row)
#๊ฒฐ๊ณผ
('aaa','์
๋ชฝ์ ๋จน๊ณ ์๋ ์๋
'),
('bbb','์ข๋น์์ด'),
('ccc','๊ณต๋ฃก๋ฐฑ๊ณผ์ฌ์ '),
('ddd','๋นจ๊ฐ๊ตฌ๋'),
('eee','์ ์๋ ์ฒ์์ ๋ฏธ๋
')
7. ๋ฐ์ดํฐ ํ์
์ ์ ํ์ธ : pragma table_info('ํ
์ด๋ธ๋ช
')
import os
db_path = os.getenv('HOME')+'/mydb.db'
conn = sqlite3.connect(db_path) # mydb.db์ ์ฐ๊ฒฐํฉ๋๋ค.
c = conn.cursor()
for row in c.execute('pragma table_info(๋์๋์ถ๋ด์ญ)'):
print(row)