
์ง๊ธ๊น์ง SELECT๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ค๋ฉด,
์ด์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ๋ฐ๊พธ๋ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ค.
SQL์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ์ธ ๊ฐ์ง ๋ช ๋ น์ด๋ค.
| ๋ช ๋ น์ด | ์๋ฏธ | ํ๋ ์ผ |
|---|---|---|
| INSERT | ์ฝ์ | ์๋ก์ด ํ ์ถ๊ฐ |
| UPDATE | ๊ฐฑ์ | ๊ธฐ์กด ํ ์์ |
| DELETE | ์ญ์ | ๊ธฐ์กด ํ ์ ๊ฑฐ |
SELECT๋ ์ฝ๊ธฐ(Read)๋ง ํ์ง๋ง,
์ด ์ธ ๋ช
๋ น์ด๋ ํ
์ด๋ธ ์์ฒด๋ฅผ ๋ฐ๊พผ๋ค.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ SELECT โ ์ฑ ์ ์ฝ๊ธฐ INSERT โ ์๋ก์ด ๋ฌธ์ฅ ์ฐ๊ธฐ UPDATE โ ๊ธฐ์กด ๋ฌธ์ฅ ์์ DELETE โ ๋ฌธ์ฅ ์ง์ฐ๊ธฐ๐ง CRUD ๊ฐ๋
Python ์ฝ๋๋ถํฐ ์์ฑํ์ง ์๋๋ค.
๋ฐ๋์ SQL์ ์ง์ ์คํํด๋ณด๊ณ ๊ตฌ์กฐ๋ฅผ ์ดํดํด์ผ ํ๋ค.
CREATE TABLE IF NOT EXISTS practice_users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
age INT
);
INSERT INTO practice_users (name, email, age)
VALUES ('์ฒ ์', 'chulsoo@example.com', 25);
INSERT INTO practice_users (name, email, age)
VALUES ('์ํฌ', 'younghee@example.com', 23);
INSERT INTO practice_users (name, email, age)
VALUES ('์งฑ๊ตฌ', 'jjanggu@example.com', 5);
SELECT * FROM practice_users;
UPDATE practice_users
SET age = 6
WHERE name = '์งฑ๊ตฌ';
SELECT * FROM practice_users
WHERE name = '์งฑ๊ตฌ';
DELETE FROM practice_users
WHERE name = '์งฑ๊ตฌ';
SELECT * FROM practice_users;
โ ๏ธ ์ง์ง ์ค์ํ ๊ฒฝ๊ณ
์ด์ Python ์ฝ๋์์ SQL์ ์คํํ๋ค.
Python์ ์ง์ DB๋ฅผ ๋ง์ง ์ ์๊ณ , pymysql์ด ์ค๊ฐ ํต์ญ์ ํ๋ค.
Python ์ฝ๋ โ pymysql (DB ๋๋ผ์ด๋ฒ) โ MySQL / MariaDB
import pymysql
conn = pymysql.connect(
host='์๋ฒ์ฃผ์',
user='์ฌ์ฉ์๋ช
',
password='๋น๋ฐ๋ฒํธ',
db='๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
',
charset='utf8mb4'
)
cursor = conn.cursor()
sql = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
cursor.execute(sql, ('์งฑ๊ตฌ', 'jjanggu@example.com', 5))
conn.commit()
print("์์ฑ๋ ID:", cursor.lastrowid)
cursor.close()
conn.close()
โ ์ํํ ๋ฐฉ์
"INSERT INTO users VALUES ('" + name + "')"
โ
์์ ํ ๋ฐฉ์
"INSERT INTO users VALUES (%s)", (name,)
ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ฉด:
execute() โ DB์ ์์ฒญ๋ง ๋ณด๋ commit() โ ๋ณ๊ฒฝ์ฌํญ์ ํ์ ์ ์ฅโ commit() ์ ํ๋ฉด?
AUTO_INCREMENT ์ปฌ๋ผ์ด ์์ ๋,
๋ฐฉ๊ธ INSERTํ ํ์ id๋ฅผ ๋ฐ๋ก ์ ์ ์๋ค.
print(cursor.lastrowid)
sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(sql, (6, '์งฑ๊ตฌ'))
conn.commit()
print("์์ ๋ ํ ์:", cursor.rowcount)
| ๊ฐ | ์๋ฏธ |
|---|---|
| 0 | ์กฐ๊ฑด์ ๋ง๋ ํ ์์ |
| 1 | 1ํ ์์ ๋จ |
sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ('์งฑ๊ตฌ',))
conn.commit()
print("์ญ์ ๋ ํ ์:", cursor.rowcount)
๐ก ํํ ์ฃผ์
DB ์์
์ ํญ์ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
๋คํธ์ํฌ ๋ฌธ์ , ์ค๋ณต ํค, ์๋ชป๋ ๋ฐ์ดํฐ, ์๋ฒ ๋ค์ดโฆ
๊ทธ๋์ INSERT / UPDATE / DELETE์๋ ๋ฐ๋์ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
[์ ์ ํ๋ฆ] Python โ SQL ์คํ โ commit โ ์ ์ฅ ์๋ฃ [์๋ฌ ๋ฐ์] Python โ SQL ์คํ โ โ ์๋ฌ โ ๋ฐ์ดํฐ ์ํ ๋ถ์์
์๋ฌ๊ฐ ๋ฌ๋๋ฐ commit์ด ๋๋ฉด ์ ๋๋ค.
์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ ๋๋๋ ค์ผ ํ๋ค.
์ํ ์ก๊ธ ๋น์
1๏ธโฃ ๋ด ๊ณ์ข์์ ๋ ์ถ๊ธ
2๏ธโฃ ์๋ ๊ณ์ข์ ์
๊ธ
โ 2๏ธโฃ์์ ์คํจํ๋ฉด?
โ 1๏ธโฃ๋ ์ทจ์ํด์ผ ํจ
์ด๊ฒ ๋ฐ๋ก rollback()
try:
์ ์ ํ๋ฆ (SQL ์คํ)
except:
์๋ฌ ์ฒ๋ฆฌ (rollback)
finally:
์์ ์ ๋ฆฌ (close)
์ด ์ธ ๋ธ๋ก์ ์ญํ ์ด ๋ช ํํ ๋ค๋ฅด๋ค.
| ๋ธ๋ก | ์ญํ |
|---|---|
| try | ์ ์์ ์ผ๋ก ์คํํ๊ณ ์ถ์ ์ฝ๋ |
| except | ์๋ฌ๊ฐ ๋ฌ์ ๋ ์คํํ ์ฝ๋ |
| finally | ์๋ฌ ์ฌ๋ถ์ ์๊ด์์ด ๋ฐ๋์ ์คํ |
import pymysql
conn = None
try:
# 1๏ธโฃ DB ์ฐ๊ฒฐ
conn = pymysql.connect(
host='์๋ฒ์ฃผ์',
user='์ฌ์ฉ์๋ช
',
password='๋น๋ฐ๋ฒํธ',
db='๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
',
charset='utf8mb4'
)
cursor = conn.cursor()
# 2๏ธโฃ SQL ์คํ
sql = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
cursor.execute(sql, ('jeff', 'jeff@example.com', 30))
# 3๏ธโฃ ์ ์์ผ ๋๋ง commit
conn.commit()
print("๋ฐ์ดํฐ ์ ์ฅ ์๋ฃ")
except pymysql.Error as e:
# 4๏ธโฃ ์๋ฌ ๋ฐ์ ์ rollback
print(f"์๋ฌ ๋ฐ์: {e}")
if conn:
conn.rollback()
finally:
# 5๏ธโฃ ์์ ์ ๋ฆฌ
if conn:
conn.close()
| ๋ฉ์๋ | ์๋ฏธ |
|---|---|
| commit() | ์ง๊ธ๊น์ง์ ๋ณ๊ฒฝ์ฌํญ์ ํ์ |
| rollback() | commit ์ด์ ์ํ๋ก ๋๋๋ฆผ |
<์์น ํ๋๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค.
์ฑ๊ณต โ commit() ์คํจ โ rollback()
DB ์ฐ๊ฒฐ๊ณผ ์ปค์๋ ๋ฐ๋์ ๋ซ์์ผ ํ๋ ์์์ด๋ค.
์๋ฌ๊ฐ ๋๋ ์ ๋๋ , ์ด์์ผ๋ฉด ๋ซ์์ผ ํ๋ค.
finally:
if cursor:
cursor.close()
if conn:
conn.close()
์ด๊ฑธ ์ ํ๋ฉด?
Python์ with ๋ฌธ์ ์์ ๊ด๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ค๋ค.
import pymysql
conn = pymysql.connect(
host='์๋ฒ์ฃผ์',
user='์ฌ์ฉ์๋ช
',
password='๋น๋ฐ๋ฒํธ',
db='๋ฐ์ดํฐ๋ฒ ์ด์ค๋ช
',
charset='utf8mb4'
)
with conn:
with conn.cursor() as cursor:
sql = "INSERT INTO users (name, email, age) VALUES (%s, %s, %s)"
cursor.execute(sql, ('์ฒ ์', 'chulsoo@example.com', 25))
conn.commit()
์ด ๊ตฌ์กฐ์์ ์ค์ํ ์
try:
with conn:
with conn.cursor() as cursor:
SQL ์คํ
conn.commit()
except:
conn.rollback()
DB ์์ ์ ํญ์ ์ด ํจํด์ผ๋ก ๊ฐ์ธ๋ ๊ฒ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
| ๊ฐ๋ | ํต์ฌ ์์ฝ |
|---|---|
| INSERT / UPDATE / DELETE | ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ๋ณ๊ฒฝ |
| commit() | ๋ณ๊ฒฝ์ฌํญ ํ์ |
| rollback() | ๋ณ๊ฒฝ์ฌํญ ์ทจ์ |
| try / except | ์๋ฌ ์ ์ด |
| finally / with | ์์ ์ ๋ฆฌ |