Python x MySQL ์ฐ๋
1.
pymysql ๋ชจ๋ ์ค์น ๋ฐ ์ฌ์ฉ
2.
๋ฐ์ดํฐ ์์ค๋ก ์ ์
โข
๋ฐ์ดํฐ ์์ค : DB ์ ์ ์ ๋ณด
โฆ
๊ณ์
โฆ
๋น๋ฐ๋ฒํธ
โฆ
ํธ์คํธ
โฆ
์คํค๋ง(๋ฐ์ดํฐ๋ฒ ์ด์ค)
3.
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ์
4.
์ปค์ ์์ฑ
5.
์กฐํ ๋ฐ ์กฐ์ ํจ์ ์ฌ์ฉ
โข
์กฐํ ํจ์ : fetchall(), fetchone()
โข
์กฐ์ ํจ์ : excute() - ๋ฑ๋ก,์์ ,์ญ์
pymysql ๋ชจ๋ ์ค์น ๋ฐ ์ฌ์ฉ
โข
pymysql ๋ชจ๋
โข
pymysql ๋ชจ๋ ์ค์น
โข
pymysql ๋ชจ๋ ์ฌ์ฉ
pymysql ๋ชจ๋
Python์์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ธฐ ์ํ ๋ชจ๋
pymysql ๋ชจ๋์ ์ฌ์ฉํ๋ฉด Python ์ฝ๋์์ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์
์ ์ํํ ์ ์์ต๋๋ค:
1.
์ฐ๊ฒฐ: MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํฉ๋๋ค.
2.
์ฟผ๋ฆฌ ์คํ: SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ถ๊ฐ, ์์ ๋๋ ์ญ์ ํฉ๋๋ค.
3.
๊ฒฐ๊ณผ ์ฒ๋ฆฌ: ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์์ Python ์ฝ๋์์ ์ฒ๋ฆฌํฉ๋๋ค.
4.
์ฐ๊ฒฐ ์ข
๋ฃ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ์ ์ข
๋ฃํฉ๋๋ค.
pymysql ๋ชจ๋ ์ค์น
pip install pymysql
Bash
๋ณต์ฌ
MySQL ์๋ฒ์์ ํต์ ์ ๋ณด์ํ๊ธฐ ์ํด TLS/SSL์ ์ฌ์ฉํ๊ธฐ ์ํด, cryptography ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํฉ๋๋ค.
pip install cryptography
Bash
๋ณต์ฌ
pymysql ๋ชจ๋ ์ฌ์ฉ
import pymysql
Bash
๋ณต์ฌ
pymysql ์ ์ฌ์ฉํ์ด ์ํ ๊ธฐ๋ณธ ์ฝ๋
import pymysql
# MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ
connection = pymysql.connect(host='ํธ์คํธ๋ช
',
user='์ฌ์ฉ์๋ช
',
password='๋น๋ฐ๋ฒํธ',
database='๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# ์ฟผ๋ฆฌ ์คํ
sql = "SELECT * FROM ํ
์ด๋ธ๋ช
"
cursor.execute(sql)
# ๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ
result = cursor.fetchall()
for row in result:
print(row)
finally:
# ์ฐ๊ฒฐ ์ข
๋ฃ
connection.close()
Python
๋ณต์ฌ
๋ฐ์ดํฐ ์์ค๋ก ์ ์
๋ฐ์ดํฐ ์์ค : DB ์ ์ ์ ๋ณด
โข
๊ณ์
โข
๋น๋ฐ๋ฒํธ
โข
ํธ์คํธ
โข
์คํค๋ง(๋ฐ์ดํฐ๋ฒ ์ด์ค)
์์ฑ | ๊ฐ |
ํธ์คํธ | 127.0.0.1 |
์ฌ์ฉ์ | aloha |
๋น๋ฐ๋ฒํธ | 123456 |
๋ฐ์ดํฐ๋ฒ ์ด์ค | aloha |
ํธ์คํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ip ์ฃผ์๋ฅผ ์๋ฏธํฉ๋๋ค. ํ์ฌ PC ๋ก ์ ์ํ๋ค๋ฉด, 127.0.0.1 ๋๋ localhost ๋ก ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ DB ์๋ฒ๊ฐ ๋ค๋ฅธ ์ปดํจํฐ๋ผ๋ฉด ํด๋น DB์๋ฒ์ IP ์ฃผ์๋ฅผ ์
๋ ฅํฉ๋๋ค.
์ฌ์ฉ์๋ ์ฌ๊ธฐ์๋ aloha ๋ผ๊ณ ์์ฑํ๊ณ ์ ๊ทผํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ 123456 ์ผ๋ก ์ง์ ํ์์ต๋๋ค. ๋ฐ์ดํฐ ์์ค (์ ์์ ๋ณด)๋ ๋ฏธ๋ฆฌ ์์ฑ๋ ๊ณ์ ์ ์ ๋ณด๋ฅผ ์
๋ ฅํฉ๋๋ค. database(์คํค๋ง)๋ ์ฌ๊ธฐ์๋ aloha ๋ผ๊ณ ์์ฑํ๊ณ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ์
pymysql ๋ชจ๋์ connect ํจ์๋ฅผ ์ฌ์ฉํ์ฌ DB์ ์ ์ํฉ๋๋ค.
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='aloha',
password='123456',
database='aloha',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
Python
๋ณต์ฌ
pymysql.connect( ๋ฐ์ดํฐ์์ค ) ํํ๋ก ํจ์๋ฅผ ํธ์ถํ๊ณ ์ ์์ ์ผ๋ก DB์ ์ ์์ด ์ฑ๊ณต๋๋ฉด, ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ด conn ๊ฐ์ฒด๋ฅผ ํตํด์ ์ปค์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ปค์ ์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์
๋๋ค.
์ปค์์ ์ญํ
1.
์ฟผ๋ฆฌ ์คํ: ์ปค์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ถ๊ฐ, ์์ , ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
2.
๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ: ์ปค์๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด ๊ฒฐ๊ณผ๋ ํ๋ ์ด์์ ๋ ์ฝ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋ ์ฝ๋๋ ํ๋ ์ด์์ ์ด์ ํฌํจํฉ๋๋ค.
3.
๊ฒฐ๊ณผ ์ฒ๋ฆฌ: ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฅผ Python ์ฝ๋์์ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ณ ๋ถ์ํ ์ ์์ต๋๋ค.
4.
ํธ๋์ญ์
๊ด๋ฆฌ: ์ปค์๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์
์ ์์ํ๊ณ ์ข
๋ฃํ๋ฉฐ, ํธ๋์ญ์
๋ด์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ปค์ ์์ฑ
with connection.cursor() as cursor:
# ์ฟผ๋ฆฌ ์คํ
sql = "SQL ์ฟผ๋ฆฌ"
cursor.execute(sql)
# ๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ
result = cursor.์กฐํ๋ฐ์กฐ์ํจ์()
Python
๋ณต์ฌ
์์ ๊ฐ์ด ์คํํ SQL ๋ฌธ์ฅ์ โ๋ฌธ์์ดโ ๋ก ์์ฑํ๊ณ , excute(sql) ํจ์๋ก ์ฟผ๋ฆฌ๋ฅผ DB ์ ์คํ ์์ฒญํฉ๋๋ค. ๊ทธ ํ, ๋ฐ์ดํฐ ์กฐํ ๋ฐ ์กฐ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ์ต๋๋ค.
์กฐํ ๋ฐ ์กฐ์ ํจ์ ์ฌ์ฉ
โข
์กฐํ ํจ์ : fetchall(), fetchone()
โข
์กฐ์ ํจ์ : excute() - ๋ฑ๋ก,์์ ,์ญ์
์กฐํ ํจ์ : fetchall(), fetchone()
ํจ์ | ์ค๋ช
| ๋ฐํ๊ฐ |
fetchall() | ํ์ฌ ์คํ๋ ์ฟผ๋ฆฌ์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. | ๊ฒฐ๊ณผ๋ฅผ ํฌํจํ๋ ๋ชจ๋ ํ์ ๋ฐํ |
fetchone() | ํ์ฌ ์คํ๋ ์ฟผ๋ฆฌ์ ๋ค์ ๊ฒฐ๊ณผ ํ ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. | ๋ค์ ๊ฒฐ๊ณผ ํ์ ๋ฐํ |
fetchall() ํจ์๋ ํ์ฌ ์คํ๋ ์ฟผ๋ฆฌ์ ๋ชจ๋ ๊ฒฐ๊ณผ ํ์ ๊ฐ์ ธ์ต๋๋ค. ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ฟผ๋ฆฌ์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํํฉ๋๋ค. ๊ฐ ํ์ ๋ฆฌ์คํธ์ ์์๋ก ํํ๋ฉ๋๋ค.
fetchone() ํจ์๋ ํ์ฌ ์คํ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ํ ์ค ๋ค์ ํ ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ค์ ๊ฒฐ๊ณผ ํ์ด ๋ฐํ๋ฉ๋๋ค. ๋ง์ฝ ๋ ์ด์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด None์ ๋ฐํํฉ๋๋ค.
โข
ํ์ ํ
์ด๋ธ์์ ๋ฐ์ดํฐ ๋ชฉ๋ก ์กฐํ
# pip install pymysql
# pip install cryptography
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with conn.cursor() as cursor:
sql = "SELECT * FROM ํ์"
cursor.execute(sql) # DB์ ์ฟผ๋ฆฌ ์์ฒญ
students = cursor.fetchall() # ๊ฒฐ๊ณผ
for student in students:
print( student )
except pymysql.MySQLError as e:
print('MySQL ์๋ฌ : ', e)
finally:
conn.close()
Python
๋ณต์ฌ
โข
ํ์ ํ
์ด๋ธ์์ ๋จ์ผ ํ
์ดํฐ ์กฐํ
# pip install pymysql
# pip install cryptography
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with conn.cursor() as cursor:
sql = "SELECT * FROM ํ์ WHERE no = 1 "
cursor.execute(sql) # DB์ ์ฟผ๋ฆฌ ์์ฒญ
student = cursor.fetchone() # ๊ฒฐ๊ณผ
print( student )
except pymysql.MySQLError as e:
print('MySQL ์๋ฌ : ', e)
finally:
conn.close()
Python
๋ณต์ฌ
์กฐ์ ํจ์ : excute() - ๋ฑ๋ก,์์ ,์ญ์
excute( SQL, ํ๋ผ๋ฏธํฐ )
ํ๋ผ๋ฏธํฐ | ์ค๋ช
|
SQL | ์คํํ SQL ์ฟผ๋ฆฌ์
๋๋ค. |
ํ๋ผ๋ฏธํฐ | ํ์์ ๋ฐ๋ผ SQL ์ฟผ๋ฆฌ์ ์ ๋ฌํ ํ๋ผ๋ฏธํฐ์
๋๋ค.
๋จ์ผ ๋ฐ์ดํฐ ๋๋ ํํ ํํ๋ก ์ง์ ํฉ๋๋ค. |
SQL ๋ฌธ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งคํํ๊ธฐ ์ํด์ โ%sโ ๊ธฐํธ๋ฅผ ์์ฑํฉ๋๋ค.
์๋์ ๊ฐ์ด ๋ฐ์ดํฐ ์กฐํ, ๋ฑ๋ก, ์์ , ์ญ์ ์ฟผ๋ฆฌ์ ๋ํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋งคํํ๋ ๊ฒฝ์ฐ %s ๊ธฐํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
sql = 'SELECT * FROM ํ์ WHERE no = %s'
Python
๋ณต์ฌ
sql = " INSERT INTO ํ์ (std_id, name, tel) "\
+ " VALUES (%s, %s, %s) "
Python
๋ณต์ฌ
sql = " UPDATE ํ์ "\
+ " SET std_id = %s "\
+ " ,name = %s "\
+ " ,tel = %s "\
+ " ,upd_date = now() "\
+ " WHERE std_id = %s "
Python
๋ณต์ฌ
sql = " DELETE FROM ํ์ "\
+ " WHERE std_id = %s "
Python
๋ณต์ฌ
์์ ์์ฑํ SQL ๋ฌธ์ฅ์ ๋ํ์ฌ, execute( sql, (ํ๋ผ๋ฏธํฐ1, ํ๋ผ๋ฏธํฐ2,) ) ํจ์๋ฅผ ํธ์ถํ๋ฉด,
%s ๊ธฐํธ์ ํ๋ผ๋ฏธํฐ1, 2 ๋ฅผ ์์๋ฅผ ๋ง์ถฐ์ ๋งคํํฉ๋๋ค.
โข
ํ์ ๋ฐ์ดํฐ ์กฐํ
โข
ํ์ ๋ฐ์ดํฐ ์ถ๊ฐ
โข
ํ์ ๋ฐ์ดํฐ ์์
โข
ํ์ ๋ฐ์ดํฐ ์ญ์
ํ์ ๋ฐ์ดํฐ ์กฐํ
# pip install pymysql
# pip install cryptography
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
try:
with conn.cursor() as cursor:
sql = "SELECT * FROM ํ์ WHERE no = %s "
cursor.execute(sql, 1) # DB์ ์ฟผ๋ฆฌ ์์ฒญ
student = cursor.fetchone() # ๊ฒฐ๊ณผ
print( student )
except pymysql.MySQLError as e:
print('MySQL ์๋ฌ : ', e)
finally:
conn.close()
Python
๋ณต์ฌ
ํ์ ๋ฐ์ดํฐ ์ถ๊ฐ
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
std_id = input('ํ๋ฒ : ')
name = input('์ด๋ฆ : ')
tel = input('์ ํ๋ฒํธ : ')
try:
# ์ปค์ ์์ฑ
with conn.cursor() as cursor:
# ๋ฐ์ดํฐ ๋ฑ๋ก ์ฟผ๋ฆฌ
sql = " INSERT INTO ํ์ (std_id, name, tel) "\
+ " VALUES (%s, %s, %s) "
# + " VALUES ('B2401', 'ํ๊ธธ๋', '010-1234-1234') "
# result = cursor.execute(sql) # ์ฟผ๋ฆฌ ์คํ ์์ฒญ
result = cursor.execute(sql, (std_id, name, tel)) # ํ๋ผ๋ฏธํฐ ์ง์
print('{}ํ์ ๋ฐ์ดํฐ ๋ฑ๋ก ์๋ฃ'.format(result))
# ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
conn.commit()
except pymysql.MySQLError as e:
print("๋ฐ์ดํฐ ๋ฑ๋ก ์ค ์๋ฌ ๋ฐ์ : ", e)
finally:
conn.close()
Python
๋ณต์ฌ
ํ์ ๋ฐ์ดํฐ ์์
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
std_id = input('ํ๋ฒ : ')
name = input('์ด๋ฆ : ')
tel = input('์ ํ๋ฒํธ : ')
try:
# ์ปค์ ์์ฑ
with conn.cursor() as cursor:
# ๋ฐ์ดํฐ ์์ ์ฟผ๋ฆฌ
sql = " UPDATE ํ์ "\
+ " SET std_id = %s "\
+ " ,name = %s "\
+ " ,tel = %s "\
+ " ,upd_date = now() "\
+ " WHERE std_id = %s "
# + " VALUES ('B2401', 'ํ๊ธธ๋', '010-1234-1234') "
# result = cursor.execute(sql) # ์ฟผ๋ฆฌ ์คํ ์์ฒญ
result = cursor.execute(sql, (std_id, name, tel, std_id)) # ํ๋ผ๋ฏธํฐ ์ง์
print('{}ํ์ ๋ฐ์ดํฐ ์์ ์๋ฃ'.format(result))
# ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
conn.commit()
except pymysql.MySQLError as e:
print("๋ฐ์ดํฐ ์์ ์ค ์๋ฌ ๋ฐ์ : ", e)
finally:
conn.close()
Python
๋ณต์ฌ
ํ์ ๋ฐ์ดํฐ ์ญ์
import pymysql
# MySQL ์๋ฒ์ ์ ์
conn = pymysql.connect(
host='127.0.0.1',
user='joeun',
password='123456',
database='joeun',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
std_id = input('ํ๋ฒ : ')
try:
# ์ปค์ ์์ฑ
with conn.cursor() as cursor:
# ๋ฐ์ดํฐ ์ญ์ ์ฟผ๋ฆฌ
sql = " DELETE FROM ํ์ "\
+ " WHERE std_id = %s "
result = cursor.execute(sql, (std_id)) # ํ๋ผ๋ฏธํฐ ์ง์
print('{}ํ์ ๋ฐ์ดํฐ ์ญ์ ์๋ฃ'.format(result))
# ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
conn.commit()
except pymysql.MySQLError as e:
print("๋ฐ์ดํฐ ์ญ์ ์ค ์๋ฌ ๋ฐ์ : ", e)
finally:
conn.close()
Python
๋ณต์ฌ