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)

결과

git

삽입

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를 통해서 확인 할 수 있습니다.

git

변경

update 역시 sql로 가능합니다.

sql = '''update customers set customerName = 'test' where customerNumber = 1'''
cursor.execute(sql)
class_db.commit()

결과

git

삭제

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

결과

git

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