TIL - 05/24 Flask mysql 연동하기

Sung Jun Jin·2020년 5월 24일
1

TIL

목록 보기
20/25
post-custom-banner

앞서 만들었던 sign-up 엔드포인트에 mysql을 연동해보자

1. 데이터베이스 생성

$ mysql -u root -p
mysql> create database flask_test;

성공적으로 데이터베이스가 생성되었다.

2. SQLAlchemy, MySQL-Connector 설치

SQLAlchemy는 파이썬 코드에서 DB와 연결하기 위해 사용되는 라이브러리이다.
MySQL-Connector는 파이썬에서 DB를 사용하기 위한 공식 API이다.

pip install sqlalchemy
pip install mysql-connector-python

3. config.py 작성하기
config.py는 각 프로젝트 환경에 맞는 설정을 따로 관리해주는 파일이다. 주로 .gitignore 파일에 추가해 git repository에 포함되지 않게 관리해준다.

config.py

db = {
    'user'     : 'root',
    'password' : '[mysql 비밀번호]',
    'host'     : '127.0.0.1',
    'port'     : '3306',
    'database' : 'flask_test'
}

DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8" 

4. users 테이블 생성하기
사용자의 email과 password를 저장할 테이블을 생성한다. 다시 mysql 서버로 접속해준다

$ mysql -u root -p
mysql> use flask_test;

PK, email, password를 가지고 있는 users 테이블을 생성해준다

Database changed
mysql> create table users(
    -> id INT NOT NULL AUTO_INCREMENT,
    -> email VARCHAR(200),
    -> password VARCHAR(200),
    -> PRIMARY KEY(id)
    -> );
    
Query OK, 0 rows affected (0.02 sec)

생성된 테이블을 한번 확인해준다

desc users;

앞서 작성했던 sign-up 엔드포인트를 수정해준다

from flask      import Flask, jsonify, request
from sqlalchemy import create_engine, text


def create_app(test_config = None):
    app = Flask(__name__)
    app.config.from_pyfile('config.py')

    database = create_engine(app.config['DB_URL'], encoding = 'utf-8')
    app.database = database

    @app.route('/sign-up', methods = ['POST'])
    def sign_up():
        user = request.json
        user_id = app.database.execute(text("""
                                            INSERT INTO users (
                                            email,
                                            password
                                           ) VALUES (
                                            :email,
                                            :password
                                           )
                                            """), user).lastrowid

        return "", 200

    return app

수정한 endpoint를 다시 호출한다

연동된 데이터베이스에가서 데이터가 잘 들어왔는지 확인한다.

profile
주니어 개발쟈🤦‍♂️
post-custom-banner

1개의 댓글

comment-user-thumbnail
2020년 5월 24일

역시는 역시네요

답글 달기