python으로 MySQL에 접속해 데이터 CRUD를 하고 싶다라는 상황을 가정하자. 이 경우 기본적으로 "Python을 이용해 MySQL에 접속" 이 이루어 져야 한다. 물론 Django같은 경우 ORM을 사용해서 간단하게 접근하는 등의 방법이 있지만, 여기서는 순수 Python의 MySQL접속과 기본적인 상호작용에 대해서만 초점을 두겠다
pymysql의 설치 명령어는 아래와 같다.
pip3 install PyMySQL
pymysql의 document는 아래 링크로 들어가면 된다
https://pypi.org/project/PyMySQL/
MySQL에 연결하기
MySQL에 연결하기 위해서는 pymysql의 connect()라는 메소드를 이용해야한다. connect()메소드는 기본적으로 아래와 같은 parameter들을 가질 수 있다.
parameter | 설명 |
user | sql user name |
port | 호스트에서 SQL에 접속하기 위한 port번호를 입력해 준다. mysql의 default 포트는 3306번이다. |
password | SQL에 접속하기 위한 비밀번호 |
charset | 인코딩값 |
db | 연결할 DB명을 입력한다. 이 필드는 필수는 아니다. |
host | SQL의 host를 의미한다. IP주소 혹은 일반 URL타입 모두 가능하다 |
import pymysql as pm
db = pm.connect(
host="{host}",
port={port number},
user={your user name},
password={your pw},
)
MySQL과 상호작용
MySQL의 상호작용(CRUD)을 하기 위해서는 cursor객체를 생성해 주어야한다. cursor는 위에서 생성한 connection객체로부터 만들 수 있다.
import pymysql as pm
db = pm.connect(
host="{host}",
port={port number},
user={your user name},
password={your pw},
)
# DB Cursor
cursor = db.cursor()
cursor.execute("show databases")
print(self.cursor.fetchall())
우선 위 코드를 실행해 보면
(('CURRENTDATA',), ('information_schema',), ('mysql',), ('performance_schema',))
과 같이 튜플 형식으로 출력하는것을 볼 수 있다. 이것을 만약 Dictionary타입으로 출력을 하고 싶은 경우에는 DictCursor를 사용하여 변경할 수 있다.
import pymysql as pm
db = pm.connect(
host="{host}",
port={port number},
user={your user name},
password={your pw},
)
# DB Cursor
cursor = db.cursor(pm.cursors.DictCursor)
cursor.execute("show databases")
print(self.cursor.fetchall())
위와 같이 cursor 생성자 안에 pymysql.cursors.DictCursor를 넘겨주면 아래와 같이 딕셔너리 타입으로 출력을 한다.
[{'Database': 'information_schema'}, {'Database': 'mysql'}, {'Database': 'performance_schema'}]
DB 조작하기
DB조작을 위해서 execute()와 fetch() 관련 메소드를 사용한다. cursor객체의 execute()메소드는 sql 쿼리문을 실행하고, fetch()관련 메소드를 이용해서 결과값을 받아온다. 예시 코드는 위의 코드를 참고하기 바란다. fetch()관련 메소드는 아래 종류들이 있다.
method | 설명 |
fetchall() | 모든 데이터를 가져온다 |
fetchone() | 하나의 row만 가져온다 |
fetchmany(x) | x개의 데이터만 가져온다. |
'DataBase > MySQL' 카테고리의 다른 글
터미널에서 외부 서버의 mysql / maria db 원격접속하기 (0) | 2022.04.05 |
---|---|
[ORACLE] DDL, DML, TCL ,DCL (0) | 2021.01.06 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 문제 발생시 해결법 (0) | 2020.06.26 |