Python Flask Mysql 연동
Mysql 연동
설치
Python에서 Mysql을 연동할 때는 PyMySql 패키지를 사용합니다.
pip3를 통해 설치할 수 있습니다.
pip3 install PyMySQL
연결
import pymysql
class_db = pymysql.connect(user='root', passwd='1234', host='127.0.0.1', db='classicmodels', charset='utf8')
user는 database 유저를 뜻합니다. root를 사용합니다.passwd는 database의 비밀번호를 뜻합니다.host는 데이터베이스의 주소를 뜻합니다. 현재 로컬에서 테스트하므로 127.0.0.1을 입력합니다.db는 접속할 db의 이름입니다. 미리 설정되어있는 db의 이름을 입력합니다.charset은 데이터베이스의 인코딩 타입 입니다. utf8을 사용합니다.
커서
cursor = class_db.cursor(pymysql.cursors.DictCursor)
데이터베이스에서 데이터를 읽기위해 커서 객체를 생성합니다. PyMySql 은 여러가지 커서가 있지만 사용하기 쉬운 DictCursor 를 사용합니다. 이 커서는 읽은 데이터를 딕셔너리 형태로 리턴합니다.
조회
pymysql은 일반 sql 쿼리를 통해 데이터베이스의 정보를 갖고 올 수 있습니다. select 문을 사용해서 데이터를 갖고옵니다.
sql = "SELECT * FROM customers"
sql을 스트링형태로 작성해서 cursor에 입력합니다.
cursor.execute(sql)
result = cursor.fetchall()
커서에 담겨있는 데이터를 fetchall()을 통해 전부 갖고옵니다. 사용할 수 있는 함수는 아래와 같습니다.
| 메서드 | 설명 |
|---|---|
| fetchall() | 모든 데이터를 한 번에 가져올 때 사용 |
| fetchone() | 한 번 호출에 하나의 행만 가져올 때 사용 |
| fetchmany(n) | n개만큼의 데이터를 가져올 때 사용 |
전달 받은 데이터는 pandas 패키지를 통해 표시할 수 있습니다.
pandas 는 pip3를 통해 아래와 같이 설치 할 수 있습니다.
pip3 install pandas
아래와 같이 import합니다 .
import pandas as pd
이후 fetchall()을 통해 전달 받은 데이터를 pandas를 통해 dataFrame으로 변경합니다.
result = pandas.DataFrame(result)
결과

삽입
Insert 도 sql query를 스트링으로 생성해서 호출합니다.
sql = '''INSERT INTO `customers` (customerNumber, customerName, contactLastName, contactFirstName, phone, addressLine1, addressLine2, city, state, postalCode, country)
VALUES (1, 'testName', 'lee', 'hyungjung', '01035425772', 'test', 'dong-back', 'young-in', 'gyung-ki-do', '1234', 'korea');'''
sql query를 작성하고 cursor를 통해 execute 합니다.
cursor.execute(sql)
excute 한 내용을 commit() 하면 데이터베이스에 적용됩니다.
class_db.commit()
결과
저장 된 내용을 mysql workbench를 통해서 확인 할 수 있습니다.

변경
update 역시 sql로 가능합니다.
sql = '''update customers set customerName = 'test' where customerNumber = 1'''
cursor.execute(sql)
class_db.commit()
결과

삭제
sql = '''delete from customers where customerNumber = 1'''
cursor.execute(sql)
class_db.commit()
결과

Mysql Flask 연동
이제 flask를 통해 웹 브라우저에서 데이터를 확인합니다.
from flask import Flask, request, jsonify
import pymysql
import json
class_db = pymysql.connect(user='root', passwd='1234', host='127.0.0.1', db='classicmodels', charset='utf8')
app = Flask(__name__)
@app.route('/')
@app.route('/get', methods=['GET'])
def get():
cursor = class_db.cursor(pymysql.cursors.DictCursor)
sql = "SELECT * FROM customers"
cursor.execute(sql)
result = cursor.fetchall()
return json.dumps(result)
@app.route('/new', methods=['POST'])
def post():
data = request.json
cursor = class_db.cursor(pymysql.cursors.DictCursor)
sql = '''INSERT INTO customers (customerNumber, customerName, contactLastName, contactFirstName, phone, addressLine1, addressLine2, city, state, postalCode, country) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);'''
cursor.execute(sql, (data['customerNumber'], data['customerName'], data['contactLastName'], data['contactFirstName'], data['phone'], data['addressLine1'], data['addressLine2'], data['city'], data['state'], data['postalCode'], data['country']))
return jsonify(data)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
Comments