Chapter 16. MySQL 연결

IT 지식 / Python·2026.08.26
MYSQL BASIC
Chapter 16. MySQL 연결
MySQL을 설치하고 파이썬에서 연결하여 데이터베이스를 활용하는 방법을 알아봅니다.

16.1 MySQL이란?

MySQL은 가장 많이 사용되는 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.

웹 프로그램, 쇼핑몰, 기업 시스템 등 다양한 분야에서 사용되며, 파이썬과 함께 데이터베이스 프로그램을 개발할 때 많이 활용됩니다.

SQLite는 하나의 파일을 사용하는 데이터베이스라면, MySQL은 데이터베이스 서버를 설치하여 여러 사용자가 동시에 사용할 수 있는 서버형 데이터베이스입니다.

MySQL의 특징
  • 무료(Open Source)로 사용할 수 있다.
  • 속도가 빠르고 안정성이 높다.
  • 대용량 데이터를 처리할 수 있다.
  • 여러 사용자가 동시에 접속할 수 있다.
  • 웹 개발에서 가장 많이 사용되는 데이터베이스 중 하나이다.
MySQL 활용 분야
  • 쇼핑몰
  • 회원관리 시스템
  • 게시판
  • ERP
  • 학교 관리 시스템
  • 기업 업무 프로그램
SQLite와 MySQL 비교
SQLite MySQL
하나의 파일(DB) 서버 기반 DB
설치가 간단 서버 설치 필요
개인 프로젝트 기업용 프로젝트
소규모 프로그램 대규모 프로그램
16.2 MySQL 설치

MySQL은 공식 홈페이지에서 다운로드할 수 있습니다.

설치 순서는 다음과 같습니다.

  1. MySQL Server 설치
  2. MySQL Workbench 설치
  3. Root 비밀번호 설정
  4. 서버 실행
MySQL 접속 정보

예를 들어 다음과 같이 접속합니다.

항목
Host localhost
Port 3306
User root
Password 1234
데이터베이스 생성
MySQL 명령어
mysql -u root -p
******
show databases;
CREATE DATABASE pyschool;
use pyschool;
회원 테이블 생성
MySQL 명령어
CREATE TABLE member(
    member_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

AUTO_INCREMENT는 데이터를 추가할 때 번호를 자동으로 증가시킵니다.

16.3 PyMySQL

PyMySQL은 파이썬에서 MySQL을 사용할 수 있도록 해주는 라이브러리입니다.

SQLite는 기본 제공되지만 MySQL은 별도의 라이브러리를 설치해야 합니다.

설치
명령 프롬프트
pip install pymysql
설치 확인
명령 프롬프트
pip show pymysql
라이브러리 가져오기
Python 코드
import pymysql
MySQL 연결
Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
print("MySQL 연결 성공")
conn.close()
실행 결과
MySQL 연결 성공
Cursor 생성
Python 코드
cursor = conn.cursor()
16.4 CRUD

CRUD는 데이터베이스에서 가장 많이 사용하는 네 가지 작업을 의미합니다.

기능 SQL
Create INSERT
Read SELECT
Update UPDATE
Delete DELETE
CREATE(데이터 추가)
실습 1

mysqlinsert.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("insert into member(name, age) values(%s,%s)", ("홍길동", 20))
cursor.execute("insert into member(name, age) values(%s,%s)", ("이순신", 30))
cursor.execute("insert into member(name, age) values(%s,%s)", ("강감찬", 40))
conn.commit()

데이터가 저장됩니다.

READ(데이터 조회)
실습 2

mysqlselect.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("SELECT * FROM member")
rows = cursor.fetchall()
for row in rows:
    print(row)
conn.close()
실행 결과
(1, '홍길동', 20)
UPDATE(데이터 수정)
실습 3

mysqlupdate.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("UPDATE member SET age=%s WHERE member_id=%s", (21, 1))  
conn.commit()
conn.close()
DELETE(데이터 삭제)
실습 4

mysqldelete.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("DELETE FROM member WHERE member_id=%s", (1,)) 
conn.commit()
conn.close()
fetchone()
실습 5

mysqlselectcount.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("SELECT count(*) FROM member")
count = cursor.fetchone()      
print(count)
conn.close()
fetchall()
실습 6

mysqlselectwhere.py

Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("SELECT * FROM member where age > %s", (20,))
rows = cursor.fetchall()
for row in rows:
    print(row)
conn.close()
16.6 SQL Injection 방지

사용자의 입력값을 SQL에 직접 연결하면 보안 문제가 발생할 수 있습니다.

잘못된 예
Python 코드
sql = "SELECT * FROM member WHERE name='" + name + "'"
좋은 예
Python 코드
sql = "SELECT * FROM member WHERE name = %s"

%s를 사용하면 SQL Injection 공격을 방지할 수 있습니다.

실습 7
mysqlselectlike.py
Python 코드
import pymysql
c host="localhost", user="root", password="mariadb", database="pyschool", charset="utf8")
cursor = conn.cursor()
cursor.execute("SELECT * FROM member where name like %s", ("%이%",))
rows = cursor.fetchall()
for row in rows:
    print(row)
conn.close()
16.7 SQLite와 MySQL 비교
SQLite MySQL
sqlite3 pymysql
connect() connect()
cursor() cursor()
execute() execute()
commit() commit()
fetchall() fetchall()

사용 방법은 매우 비슷합니다.

a computer screen with a bunch of code on it
📌 Chapter 16 핵심 정리
  • MySQL은 오픈소스 관계형 데이터베이스 관리 시스템이다.
  • MySQL은 서버형 데이터베이스로 여러 사용자가 동시에 사용할 수 있다.
  • PyMySQL을 사용하여 파이썬에서 MySQL에 연결할 수 있다.
  • CRUD 작업은 데이터베이스에서 가장 많이 사용하는 네 가지 작업이다.
  • SQL Injection 공격을 방지하기 위해 %s를 사용해야 한다.
  • SQLite와 MySQL은 사용 방법이 매우 유사하다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기