17 Wed
[HEAD FIRST PYTHON] 7๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ
DB-API
ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ ์ง์
์ด ๊ธฐ๋ฅ์ MySQL ์ ์ฉ์ ์๋
SQL ๊ธฐ๋ฐ DB๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก DB-API๋ผ๋ ํ์ค DB API๋ฅผ ์ ๊ณตํ๋ค.
์ด ๋ ํ์ํ ๊ฒ์ DB๊ธฐ์ ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ ๋๋ผ์ด๋ฒ
์ฝ๋ <-> ํ์ด์ฌ์ DB-API <-> MySQL ๋๋ผ์ด๋ฒ <-> MySQL
์ฝ๋๋ฅผ ๋ฐ๊พธ์ง ์์๋ DB ๊ธฐ์ ์ ์ธ์ ๋ ์ง ๋ฐ๊ฟ ์ ์๋ ์ฅ์ ์ด ์๋ค.
MySQL ๋น๋ฒ ์์ด๋ฒ๋ ธ์ ๋
๋ก๊ทธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒฐ์ ํ๊ธฐ
mysql> create table log(
-> id int auto_increment primary key,
-> ts timestamp default current_timestamp,
-> phrase varchar(128) not null,
-> letters varchar(32) not null,
-> ip varchar(16) not null,
-> browser_string varchar(256) not null,
-> results varchar(64) not null );
+----------------+--------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+-------------------+-------------------+
| id | int | NO | PRI | NULL | auto_increment |
| ts | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| phrase | varchar(128) | NO | | NULL | |
| letters | varchar(32) | NO | | NULL | |
| ip | varchar(16) | NO | | NULL | |
| browser_string | varchar(256) | NO | | NULL | |
| results | varchar(64) | NO | | NULL | |
+----------------+--------------+------+-----+-------------------+-------------------+
7 rows in set (0.06 sec)
DB-API ์์ธํ ๋ณด๊ธฐ
>>> dbconfig = { 'host': '127.0.0.1',
... 'user': 'vsearch',
... 'password': 'vsearchpasswd',
... 'database': 'vsearchlogDB', }
>>> import mysql.connector
>>> conn = mysql.connector.connect(**dbconfig)
>>> cursor=conn.cursor()
1 : MySQL์ ์ฐ๊ฒฐํ ๋๋ ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ์ ๋ณด๋ฅผ ์์์ผ ํ๋ค.
MySQL์ ์คํํ๋ ์ปดํจํฐ์ IP ์ฃผ์/์ด๋ฆ
์ฌ์ฉ์ ID
์ํธ
์ฌ์ฉ์ ID๋ก ์ด์ฉํ๋ ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช
5 : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ธ๋ฅผ import ํ์ฌ DB-API๋ก MySQL ์ ์ฉ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ๋ก import๋ฌธ์ ํจ์์์ ๋ฃ๋ ์ผ์ ๊ต์ฅํ ์๋ชจ์ ์ธ ์ผ์ด๋ค. ์ธํฐํ๋ฆฌํฐ๊ฐ ํจ์ ํธ์ถ๋ง๋ค import ํ๊ธฐ ๋๋ฌธ.
6 : ์ด ํธ์ถ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ. ์ด ๋ ์ฐ๊ฒฐ ํน์ฑ ๋์ ๋๋ฆฌ๋ฅผ ์ ๋ฌํ๋ค.
์ฌ๊ธฐ์
**
์ ํฌ์ธํฐ๊ฐ ์๋๋ค. ์ดํ์ ์ค๋ช
7 : ์๋ฒ๋ก ๋ช ๋ น์ ์ ๋ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ธฐ ์ํด์๋ ์ปค์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
>>> _ SQL = """show tables"""
>>> cursor.execute(_SQL)
>>> res = cursor.fetchall()
>>> _SQL = """describe log"""
>>> cursor.execute(_SQL)
>>> res = cursor.fetchall()
>>> for row in res:
print(row)
1 : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณด๋ผ SQL ์ง์๋ฅผ ์ผ์ค๋ฐ์ดํ๋ก ๊ฐ์ธ๊ณ _SQL ๋ณ์๋ก ํ ๋นํ๋ค. ์ง์๋ ์ฌ๋ฌ ํ์ผ๋ก ๊ตฌ์ฑ๋ ์ผ์ด ๋ง๊ณ ์ผ์ค ๋ฐ์ดํ๋ฅผ ์ด์ฉํ๋ฉด ์ฌ๋ฌ ํ์ ํํํ๊ธฐ ํธํ๋ค.
2 : _SQL ๋ณ์์ ์ ์ฅ๋ ์ง์๋ฅผ MySQL๋ก ๋ณด๋ด ์คํํ๋ค.
3 :
cursor.fetchall
๋ฉ์๋๋ก ์ง์์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฒญํ๋ค.cursor.fetchone
: ํ ํ์ ๋ฐํ ์์ฒญcursor.fetchmany
: ๋ฐ์ ํ์ ์๋ฅผ ์ง์ cursor.fetchall
: ๋ชจ๋ ๊ฒฐ๊ณผ ํ์ ๋ฐํ ์์ฒญ
>>> _SQL = """insert lnto log
(phrase, letters, ip, browser_string, results)
values
('hitch-hiker', 'aeiou', '127.0.0.1', 'Firefox', "{'e', 'i'}") """
>>> cursor.execute(_SQL)
1 : ํ๋ ์ฝ๋ฉ ํ์ฌ insert ๋ฌธ์ ์คํ. ํ ์ด๋ธ์ ์ ์ฅํ๋ ๊ฐ์ด ๋งค๋ฒ ๋ฐ๋๋ฏ๋ก ํ๋์ฝ๋ฉ์ ์ข์ง ์์. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅ
>>> _SQL = """insert lnto log
(phrase, letters, ip, browser_string, results)
values
(%s %s %s %s %s) """
>>> cursor.execute(_SQL, ('hitch-hiker', 'aeiou', '127.0.0.1', 'Firefox', "{'e', 'i'}"))
4 , 5: DB-API ํ๋ ์ด์ค ํ๋๋ผ๊ณ ํ๋ฉฐ, ํ๋์ฝ๋ฉ ๋์ ์ธ์ฃ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ฌํ์ฉ ํ ์ ์๋ค.
>>> conn.commit()
>>> _SQL = """select * from log"""
>>> cursor.execute(_SQL)
>>> for row in cursor.fetchall():
print(row)
1 : 2๋ฒ ํ์์ select๋ฅผ ํ ๋, ์ต๊ทผ์ ์ ์ฅ๋ ๋ด์ฉ์ด ๋ถ๋ฌ์ค์ง ์์์ง ์ ์๋ค. ์ด๋ฅผ ์ํด
conn.commit()
์ ํตํด ์บ์์ ๋จ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๊ธฐ๋กํ๋๋ก ๊ฐ์ ํ ์ ์๋ค.๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋์์ ๋น์ผ ์ฐ์ฐ(ํ๋ก์ธ์ฑ ์ฌ์ดํด ๊ด์ ์์) ์ด๊ธฐ ๋๋ฌธ์, ์บ์์ ์ ์ฅํ๋ ์ผ์ด ๋ค์์ด๋ค.
>>> cursor.close()
True
>>> conn.close()
1, 3 : ์ฐ๊ฒฐ์ด ๋๋ ๋ค์๋ ๋ซ๋ ๊ฒ์ด ์ข๋ค.
Last updated
Was this helpful?