1. Python과 MySQL 통합: 소개
Python은 다양한 데이터베이스 관리 시스템(DBMS)과 상호 작용할 수 있는 매우 유연한 프로그래밍 언어입니다. 그 중 MySQL은 오픈 소스 관계형 데이터베이스로 널리 사용되며, Python과 결합하면 강력한 데이터 조작 기능을 제공할 수 있습니다.
이 문서에서는 Python을 MySQL에 연결하고 데이터를 삽입, 조회, 업데이트, 삭제하는 기본 데이터베이스 작업을 수행하는 방법을 설명합니다.
2. Python과 MySQL 통합을 위한 환경 설정
먼저 Python과 MySQL을 연결하기 위한 환경을 준비해야 합니다. 이 섹션에서는 필요한 소프트웨어의 설치 및 설정 방법을 설명합니다.
2.1 MySQL 설치
MySQL 설치 단계는 운영 체제에 따라 다릅니다. 각 OS별 간단한 설치 방법은 다음과 같습니다:
- Windows: 공식 MySQL 웹사이트에서 설치 프로그램을 다운로드하고 설치 안내에 따라 진행합니다.
- Mac:
brew install mysql명령을 사용하여 Homebrew로 설치합니다. - Linux: Debian 계열 시스템에서는
sudo apt-get install mysql-server명령을 사용합니다.
2.2 Python 환경 설정
다음으로 Python 환경에 필요한 라이브러리를 설치합니다. Python을 MySQL에 연결하려면 다음 라이브러리 중 하나가 필요합니다:
- mysql-connector-python: Oracle에서 제공하는 공식 MySQL 커넥터.
- PyMySQL: MySQLdb와 호환되는 순수 Python 라이브러리.
설치는 간단합니다—다음 명령을 실행하세요:
pip install mysql-connector-python
또는 PyMySQL을 사용하고 싶다면 다음 명령을 실행합니다:
pip install pymysql
2.3 라이브러리 간 차이점
mysql-connector-python은 공식 MySQL 커넥터로 성능이 뛰어나고 지원이 풍부합니다. 반면 PyMySQL은 가볍고 MySQLdb 호환성이 필요할 때 좋은 선택입니다. 어느 것을 사용할지는 프로젝트 요구 사항에 따라 결정하면 됩니다.

3. Python과 MySQL 연결 기본 단계
Python을 MySQL에 연결하는 과정은 간단합니다. 이 섹션에서는 MySQL 데이터베이스에 연결하고 테이블을 다루는 단계들을 설명합니다.
3.1 MySQL 데이터베이스에 연결하기
다음은 mysql-connector-python을 사용해 MySQL에 연결하는 기본 예제입니다:
import mysql.connector
# MySQL connection details
conn = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='test_db'
)
# Check connection
if conn.is_connected():
print("Successfully connected to MySQL server!")
이 코드는 mysql.connector.connect() 함수를 사용해 로컬 MySQL 서버에 연결합니다. 성공하면 확인 메시지가 표시됩니다.
3.2 연결 문제 해결
연결에 실패할 경우 발생할 수 있는 오류는 다음과 같습니다:
- 인증 오류: 사용자 이름이나 비밀번호가 올바르지 않을 수 있습니다.
- 호스트 연결 오류: 서버가 실행 중인지 확인하고 방화벽 설정을 점검하세요.
프로그램이 중단되지 않도록 try-except 블록으로 오류를 처리합니다:
try:
conn = mysql.connector.connect(...)
except mysql.connector.Error as err:
print(f"Error: {err}")
4. 기본 SQL 작업
MySQL에 연결한 후에는 기본 SQL 작업을 수행해야 합니다. 이 섹션에서는 데이터 삽입, 조회, 업데이트, 삭제 방법을 다룹니다.
4.1 데이터 삽입
테이블에 새 레코드를 삽입하려면 다음 SQL 문을 사용할 수 있습니다:
cursor = conn.cursor()
# Insert query
insert_query = "INSERT INTO users (username, email) VALUES (%s, %s)"
data = ("user1", "user1@example.com")
# Execute query
cursor.execute(insert_query, data)
# Commit changes
conn.commit()
4.2 데이터 조회
데이터를 조회하려면 SELECT 문을 사용합니다. 다음은 모든 사용자 레코드를 가져오는 예제입니다:
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
# Display results
for row in rows:
print(row)
4.3 데이터 업데이트
기존 레코드를 업데이트하려면 UPDATE 문을 사용합니다:
update_query = "UPDATE users SET email = %s WHERE username = %s"
cursor.execute(update_query, ("new_email@example.com", "user1"))
conn.commit()
4.4 데이터 삭제
불필요한 레코드를 제거하려면 DELETE 문을 사용합니다:
delete_query = "DELETE FROM users WHERE username = %s"
cursor.execute(delete_query, ("user1",))
conn.commit()

5. 고급 작업
다음으로 트랜잭션 관리와 프리페어드 스테이트먼트와 같은 고급 작업을 살펴보겠습니다.
5.1 트랜잭션 관리
여러 데이터베이스 작업을 하나의 그룹으로 실행하고 필요 시 롤백하려면 트랜잭션을 사용합니다:
try:
cursor.execute("...")
conn.commit() # Commit if successful
except:
conn.rollback() # Roll back if an error occurs
5.2 프리페어드 스테이트먼트 사용
SQL 인젝션을 방지하기 위해 프리페어드 스테이트먼트를 사용하는 것이 권장됩니다:
stmt = "SELECT * FROM users WHERE username = %s"
cursor.execute(stmt, ("user1",))
6. Python과 MySQL 실전 예제
Python과 MySQL을 결합하면 다양한 실용 애플리케이션을 개발할 수 있습니다. 이 섹션에서는 실제 사용 사례를 살펴봅니다.
6.1 사용자 관리 시스템 구축
Python과 MySQL을 함께 사용하는 일반적인 예가 사용자 관리 시스템입니다. 아래는 간단한 설계 예시입니다:
단계 1: 사용자 테이블 생성
먼저 CREATE TABLE 문을 사용해 사용자 정보를 저장할 테이블을 생성합니다:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL
);
단계 2: 신규 사용자 등록
다음으로 신규 사용자를 등록하는 함수를 구현합니다. INSERT 문을 사용한 Python 예시는 다음과 같습니다:
import mysql.connector
# Connect to MySQL
conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor()
# Insert a new user
insert_query = "INSERT INTO users (username, email, password) VALUES (%s, %s, %s)"
user_data = ("user123", "user123@example.com", "securepassword")
cursor.execute(insert_query, user_data)
# Commit changes
conn.commit()
# Close connection
cursor.close()
conn.close()
단계 3: 로그인 기능 구현
사용자를 인증하는 로그인 기능을 추가합니다. SELECT 문을 사용한 예시는 다음과 같습니다:
# Login authentication
login_query = "SELECT * FROM users WHERE username = %s AND password = %s"
login_data = ("user123", "securepassword")
cursor.execute(login_query, login_data)
user = cursor.fetchone()
if user:
print("Login successful")
else:
print("Login failed")
6.2 MySQL을 활용한 데이터 분석
MySQL을 데이터 저장소로 사용하고 Python의 데이터 분석 라이브러리와 결합하면 강력한 분석을 수행할 수 있습니다. 아래는 Pandas를 활용한 예시입니다:
단계 1: MySQL에서 데이터 가져오기
MySQL에 저장된 데이터를 가져와 Pandas DataFrame에 로드합니다:
import mysql.connector
import pandas as pd
# Connect to MySQL
conn = mysql.connector.connect(user='root', password='password', host='localhost', database='test_db')
cursor = conn.cursor()
# Fetch data into a Pandas DataFrame
query = "SELECT * FROM users"
cursor.execute(query)
rows = cursor.fetchall()
df = pd.DataFrame(rows, columns=['id', 'username', 'email', 'password'])
# Preview data
print(df.head())
# Close connection
cursor.close()
conn.close()
단계 2: 데이터 집계 및 분석
Pandas를 사용해 집계 및 분석을 수행합니다. 예를 들어 이메일 도메인별 사용자 수를 셀 수 있습니다:
# Count users by email domain
df['domain'] = df['email'].apply(lambda x: x.split('@')[1])
domain_count = df['domain'].value_counts()
print(domain_count)
이와 같이 MySQL을 백엔드로 사용하고 Pandas 및 기타 Python 도구를 활용해 효과적인 데이터 분석을 수행할 수 있습니다.

7. 요약 및 다음 단계
이 가이드에서는 Python을 사용한 MySQL 작업의 기본을 다루었습니다—기본적인 데이터베이스 작업부터 간단한 사용자 관리 시스템 구축, 그리고 데이터 분석까지. 이 기술은 웹 애플리케이션 및 데이터 기반 시스템을 구축하는 데 매우 강력합니다.
7.1 추가 학습
이 기사에서 설명한 기본을 마스터한 후, 다음 단계로 진행해 보세요:
- Django 또는 Flask와 통합: Python 프레임워크를 사용해 보다 고급 웹 애플리케이션을 구축합니다.
- 데이터베이스 최적화: MySQL 인덱싱 및 쿼리 최적화에 대해 배우고 성능을 향상시킵니다.
- 빅 데이터 분석: 머신러닝 모델 및 대규모 분석을 위해 Python에서 MySQL 데이터를 처리합니다.


