PyMySQL - 파이썬으로 MySQL 사용하기
- Development/Python
- 2021. 3. 1.
파이썬으로 MySQL 사용하기
Python으로 MySQL에 접속하고, 데이터를 다루려면 여러 라이브러리가 있다. 마침 StackOverFlow에도 이와 관련한 Q&A가 있어서 살펴보고 선택하고자 한다.
- 성능이 중요한 것이 아니라면, PyMySQL을 선택하자. 웬만하면 mysql-connector-python은 사용하지 말자는 이야기 되겠다.
python 가상환경 설정/ 변경
설치/ 테스트를 위해, 가상 개발환경을 확인하고 변경한다.
$ pyenv versions
system
2.7.16
2.7.16/envs/venv-2.7.16
3.7.2
3.7.2/envs/test
3.7.2/envs/venv-3.7.2
3.7.3
3.8.5
test
venv-2.7.16
사전에 위와 같이 설정을 해두었고, 이중 venv-3.7.2를 테스트 환경으로 사용해 보고자 한다.
$ mkdir pymysql_test
$ cd pymysql_test
$ pyenv local venv-3.7.2
해당 디렉토리에서 venv-3.7.2를 사용한다고 설정한다.
PyMySQL 설치
만약 설치가 되어 있다면, 파이썬을 실행한 후에
import pymysql
문이 정상적으로 실행될 것이다. 따라서, PyMySQL을 설치하기에 앞서, 다음과 같이 확인해보자.
$ python -c 'import pymysql'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'pymysql'
위와 같이 에러가 발생한다면, 라이브러리가 설치되어 있지 않은 것이다.
$ pip install PyMySQL
Collecting PyMySQL
Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
|████████████████████████████████| 43 kB 461 kB/s
Installing collected packages: PyMySQL
Successfully installed PyMySQL-1.0.2
위와 같이 설치가 완료되면, 정상적으로 설치되었는지 앞서 실행한 명령어로 다시 검사해 본다.
python -c 'import pymysql'
정상적으로 import가 된다면 별다른 에러 메시지가 뜨지 않는다.
PyMySQL로 MySQL 접속하기
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
- *1에는 DB 계정을
- *2에는 계정 비밀번호를
- *3에는 접속하고자 하는 DB명을
기록한다.
테스트용 스키마 및 샘플
테스트에 사용하는 스키마 및 샘플은 아래와 같다.
CREATE TABLE IF NOT EXISTS `students` (
id int(6) AUTO_INCREMENT,
name varchar(255) NOT NULL,
major varchar(255) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO students (name, major) VALUES
('John', 'Music'),
('Sarah', 'Art'),
('Steve', 'Computer Science');
PyMySQL로 CRUD 테스트하기
SELECT
먼저 기존에 입력되어 있는 데이터를 확인해 본다.
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "SELECT * FROM students"
cursor.execute(query)
result = cursor.fetchall()
print(result)
를 실행하면 다음과 같은 결과를 확인할 수 있다.
((1, 'John', 'Music'), (2, 'Sarah', 'Art'), (3, 'Steve', 'Computer Science'))
print(result) 부분을 다음과 같이 고치면,
for x in result:
print(x)
아래와 같이 구분해서 확인 가능할 것이다.
(1, 'John', 'Music')
(2, 'Sarah', 'Art')
(3, 'Steve', 'Computer Science')
만약, 전체 결과를 확인하는 대신 한 개만 확인하려면,
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "SELECT * FROM students"
cursor.execute(query)
result = cursor.fetchone()
print(result)
와 같이 실행하고, 다음과 같은 결과를 확인할 수 있다.
(1, 'John', 'Music')
INSERT
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "INSERT INTO students (name, major) VALUES (%s, %s)"
data = ('Emma', 'Movie')
cursor.execute(query, data)
db.commit()
와 같이 실행하고, 앞서 실행한 SELECT 문으로 데이터가 정상적으로 추가되었는지 확인한다.
(1, 'John', 'Music')
(2, 'Sarah', 'Art')
(3, 'Steve', 'Computer Science')
(4, 'Emma', 'Movie')
맨 마지막 레코드가 새로 추가된 것을 확인할 수 있다. execute()문 대신, executemany()를 사용하면 여러 데이터를 동시에 insert할 수도 있다.
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "INSERT INTO students (name, major) VALUES (%s, %s)"
data = [('Tom', 'Math'), ('Max', 'Statistics')]
cursor.executemany(query, data)
db.commit()
다시 SELECT 문으로 데이터를 확인해 보면,
(1, 'John', 'Music')
(2, 'Sarah', 'Art')
(3, 'Steve', 'Computer Science')
(4, 'Emma', 'Movie')
(5, 'Tom', 'Math')
(6, 'Max', 'Statistics')
데이터가 정상적으로 추가된 것을 확인할 수 있다.
UPDATE
특정 데이터를 변경해 보자.
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "UPDATE students SET name = 'Ben' WHERE id = 6"
cursor.execute(query)
db.commit()
앞서 마지막으로 입력한 데이터의 이름을 변경하였다. SELECT로 데이터를 확인해 보니,
(1, 'John', 'Music')
(2, 'Sarah', 'Art')
(3, 'Steve', 'Computer Science')
(4, 'Emma', 'Movie')
(5, 'Tom', 'Math')
(6, 'Ben', 'Statistics')
정상적으로 변경되었다.
DELETE
마지막 레코드를 삭제해 보자.
import pymysql
db = pymysql.Connect(host='localhost', user='*1', password='*2', database='*3')
cursor = db.cursor()
query = "DELETE FROM students WHERE id = 6"
cursor.execute(query)
db.commit()
데이터를 확인해 보면,
(1, 'John', 'Music')
(2, 'Sarah', 'Art')
(3, 'Steve', 'Computer Science')
(4, 'Emma', 'Movie')
(5, 'Tom', 'Math')
정상적으로 반영되어 있다.
참고 - MySQL 설치
'Development > Python' 카테고리의 다른 글
파이썬 - 의존성 라이브러리 추출하기/설치하기 (pip 사용) (0) | 2021.12.11 |
---|---|
파이썬 - 문자열 포맷을 지정하는 여러가지 방법 (0) | 2021.12.08 |
네이버 검색광고 API 사용 준비하기 (0) | 2021.12.07 |
파이참(PyCharm)에서 pip 업데이트가 안될 때? (0) | 2021.12.02 |
주피터 랩/주피터 노트북 - password or token 입력창 뜨면? (2) | 2021.02.24 |
구글 코랩 (Google Colab) 시작하기 (0) | 2021.01.20 |
아나콘다로 맥북에 주피터 랩/주피터 노트북 설치하기 (파이썬 개발환경 구축) (4) | 2020.12.30 |
파이썬에서의 unit test - pytest (unittest + nose의 대안) (0) | 2020.11.21 |