카테고리 없음

Python에서 MySQL데이터 접근하기

2022. 7. 29. 10:34

Python에서 MySQL데이터 접근하기


 

Mysql 사용자 추가하기

1. MySQL 관리자로 로그인

$ mysql -u root -p
Enter password:

 

2. 로컬에서 접속 가능한 사용자 추가

mysql> CREATE user '사용자'@'localhost' IDENTIFIED BY '사용자_비밀번호';

 

3. DB 권한 부여하기

mysql> GRANT ALL PRIVILEGES ON *.* to '사용자'@'localhost';           # 모든 DB 접근 가능 *.*
mysql> GRANT ALL PRIVILEGES ON db_name.* to '사용자'@'localhost';     # 특정 DB에만 접근 가능

mysql> FLUSH PRIVILEGES;                                             # 새로운 세팅 적용

 

4. 사용자 계정 삭제

mysql> DROP USER '사용자'@'localhost';

 


 

Python에서 MySQL 접속하기

 

Python의 MySql모듈 종류

  • PyMySQL
  • mysql-connector-python ( >= MySQL 8.0) or mysql.connector (< MySQL 8.0)

PyMySQL를 이용하여 접근하는 방법

$ pip install PyMySQL

 

접속 방법

  1. PyMySql 모듈 import
  2. MySQL 연결: pymysql.connect()

    - 호스트명, 로그인, 암호, 접속할 DB 등 지정

  3. DB커서 객체생성: Connection 객체로부터 cursor() 호출
  4. SQL문 실행
    • Cursor객체의 메소드를 사용하여 SQL을 DB서버에 전송 & Fetch
      1. SQL을 DB서버에 전송: execute()
      2. Fetch: fetchall(), fetchone(), fetchmany(n)
    • Connection 객체의 commit() : 삽입, 갱신, 삭제 (INSERT/UPDATE/DELETE)
  5. DB 연결 종료: Connection객체의 close()
# STEP 1
import pymysql

# STEP 2: MySQL Connection 연결
con = pymysql.connect(host='localhost', user='mysql_user_id', password='_password_',
                       db='access_db', charset='utf8')
 
# STEP 3: Connection 으로부터 Cursor 생성
cur = con.cursor()
 
# STEP 4: SQL문 실행 및 Fetch
sql = "SELECT player, birth FROM baseball"
cur.execute(sql)
 
# -> 데이터 Fetch
rows = cur.fetchall()
print(rows)             # 전체 rows

# STEP 5: DB 연결 종료
con.close()

 

STEP2에서 MySQL Connection 연결할 때 아래 옵션도 넣어줄 수 있다.

# 결과 DB 반영 (Insert or update)
autocommit=True

# DB조회시 컬럼명을 동시에 보여줌.
cursorclass=pymysql.cursors.DictCursor

 

 

예시)

import pymysql
import pandas as pd

con = pymysql.connect(host='localhost', user='root', password='root'
                      ,db='access_db'
                      ,charset='utf8'
                      ,autocommit=True
                      ,cursorclass=pymysql.cursors.DictCursor 
                     )
cur = con.cursor()