์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ (ํจ์บ ์์ ์ ๋ฆฌ)
<์ด์ ๊ธ>
https://silvercoding.tistory.com/44
[python ๊ธฐ์ด] 12. ์ธ๋ถ ํ์ผ ์ฒ๋ฆฌ (Excel, CSV ํ์ผ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ)
์ฝ๋ - ํจ์บ ์์ ์ฝ๋ ์ฐธ๊ณ (ํจ์บ ์์ ์ ๋ฆฌ) <์ด์ ๊ธ> https://silvercoding.tistory.com/43 https://silvercoding.tistory.com/42 https://silvercoding.tistory.com/41 https://silvercoding.tistory.com/40..
silvercoding.tistory.com
import sqlite3
import datetime
์ฐ์ ์ฌ์ฉํ ๊ฒ import ํด์ฃผ๊ธฐ
- SQliteDatabaseBrowserPortable.exe ๋ฅผ ์ค์นํด ์ค๋ค.
์ด๊ณณ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ์ฝ์ ๋ ์ง ์์ฑ
now = datetime.datetime.now()
print('now: ', now)
nowDateTime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDateTime: ', nowDateTime)
now: 2021-08-03 11:43:31.850770
nowDateTime: 2021-08-03 11:43:31
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ์ด์ค ๋ณ์๋ฅผ ์ฌ์ ์์ฑํ๋ค.
- sqlite3 ์ดํด๋ณด๊ธฐ
print('sqlite3.version: ', sqlite3.version)
print('sqlite3.sqlite_version: ', sqlite3.sqlite_version)
sqlite3.version: 2.6.0
sqlite3.sqlite_version: 3.33.0
* sqlite ์ฌ์ฉ
(1) DB ์์ฑ & Auto Commit (Rollback)
conn = sqlite3.connect('./resource/database.db', isolation_level=None)
DB๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐํด ์ค๋ค. DB์ ๋ช ๋ นํ ๋ ์ปค๋ฐ(commit)์ ๊ผญ ํด์ฃผ์ด์ผ ํ๋๋ฐ , isolation_level=None์ผ๋ก ์ค์ ํ๋ฉด AutoCommit์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๊น ๋ค์ด๋ฐ์๋ SQliteDatabaseBrowserPortable.exe ์์ [ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐ - database.db ] ๋ฅผ ์คํ ํด ์ค๋ค.
(2) Cursor
# Cursor
c = conn.cursor()
print('Cursor Type: ', type(c))
Cursor Type: <class 'sqlite3.Cursor'>
cursor ์ฐ๊ฒฐ์ ํด์ค๋ค. ์ด ์ปค์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ช ๋ น์ ํ ์ ์๋ค.
(3) ํ ์ด๋ธ ์์ฑ CREATE TABLE
( 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, regdate text)')
ํ ์ด๋ธ์ ์์ฑํ๊ธฐ ์ํด์ CREATE TABLE ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ค์ ํ ์ด๋ธ์ด๋ฆ(์์ฑ ํ์ ) ์ด๋ฐ ํํ๋ก ๋ฃ์ด์ค๋ค. id ์์ฑ์ PRIMARY KEY๋ก ์ค์ ํด ์ฃผ์๋ค.
์ด๋ ๊ฒ user ํ ์ด๋ธ์ด ์์ฑ๋์๋ค!
(4) ๋ฐ์ดํฐ ์ฝ์ INSERT INTO
# ๋ฐฉ๋ฒ 1
c.execute("INSERT INTO users VALUES(1, 'Kim', 'silver@naver.com', '010-0000-0000', 'kim.com', ?)", (nowDateTime,))
# ๋ฐฉ๋ฒ 2
c.execute('INSERT INTO users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)', (2, 'Park', 'Park@daum.net', '010-1111-1111', 'Park.com', nowDateTime))
- INSERT INTO ํ ์ด๋ธ์ด๋ฆ VALUES()
- INSERT INTO ํ ์ด๋ธ์ด๋ฆ() VALUES()
๋ฐฉ๋ฒ 1์ ๋ฐ๋ก VALUES์์ ๊ฐ์ ๋ฃ๊ณ , ๋ณ์๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ ?๋ก ์์ฑํ ํ execute์ ์ธ์์์ ํํ์์ ๋ณ์๋ฅผ ๋ฃ์ด์ค๋ค. ๋ฐฉ๋ฒ 2๋ ํ ์ด๋ธ์ด๋ฆ() ์์ ์์ฑ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ๋์ดํ๊ณ , VALUES() ์์ ๋ชจ๋ ? ๋ก ์์ฑํด ์ฃผ๊ณ , execute์ ์ธ์์์ ํํ ์์ ๊ฐ ๋๋ ๋ณ์๋ฅผ ๋ฃ์ด์ค๋ค.
์๋ก๊ณ ์นจ์ ํด์ฃผ๋ฉด ์์ ๊ฐ์ด ๊ฐ์ด ์์ฑ๋์๋ค!
(5) Many ์ฝ์ ( ํํ, ๋ฆฌ์คํธ )
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDateTime),
(4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', nowDateTime),
(5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', nowDateTime)
)
c.executemany('INSERT INTO users(id, username, email, phone, website, regdate) VALUES(?, ?, ?, ?, ?, ?)', userList)
excutemany์ ๋๋ฒ์งธ ์ธ์์ ํํ์ด๋ ๋ฆฌ์คํธ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ํ๊บผ๋ฒ์ ๋ฐ์ดํฐ ์ฝ์ ์ด ๊ฐ๋ฅํ๋ค.
(6) ํ ์ด๋ธ ๋ฐ์ดํฐ ์ญ์
conn.execute('DELETE FROM users')
์ด๋ ๊ฒ ์์ฑํด ์ฃผ๋ฉด users ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค.
- ์ง์์ง ๊ฐ์ ๋ฐํํ๊ณ ์ญ์ ํ๊ธฐ
print('users db delete : ', conn.execute('DELETE FROM users').rowcount)
users db delete : 5
rowcount๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์๋ฅผ ๋ฐํํด์ค ์ ์๋ค.
(7) ์ปค๋ฐ & ๋กค๋ฐฑ
: isolation_level="None" ์ผ ๊ฒฝ์ฐ ์๋ ๋ฐ์
# ์ปค๋ฐ
# conn.commit()
# ๋กค๋ฐฑ
# conn.rollback()
๋ณธ ํฌ์คํ ์์ ์คํ ์ปค๋ฐ ์ค์ ์ ํด๋จ์ผ๋ฏ๋ก ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํด ๋๋๋ค.
(8) ์ ์ ํด์
conn.close()
๋ง๋ฌด๋ฆฌ ํ ๋๋ ์ ์ํด์ ๋ฅผ ๊ผญ ํด์ฃผ๋๋ก ํ๋ค!