728x90
3.Flask Database 연결 + Config 설정
Mysql을 SQL_Alchemy와 연결하여 ORM을 사용하도록 만들어 보겠습니다.
https://github.com/kschoi93/flask-example
Database MySql 설치 및 환경 설정
Database 로 사용할 Mysql을 다운로드 합니다
저는 최신 버전 8.0.28 버전을 다운로드 했습니다.
설치까지 완료하면 윈도우 검색으로 mysql command line client를 실행합니다
설치할 때 입력했던 비밀번호를 입력해 로그인을 합니다
flask에서 사용 할 database를 생성합니다
create database toy_project;
database를 사용할 유저를 생성합니다
- 유저 아이디 : admin
- 유저가 접근하는 주소 : localhost
- 유저 비밀번호 : password
create user 'admin'@'localhost' identified by 'password';
유저에게 권한을 부여하고 적용시킵니다
- toy_project 모든 사항에 대한 권한을 admin에게 부여한다
grant all privileges on toy_project.* to 'admin'@'localhost';
flush privileges;
MySQL Workbench로 로그인해서 확인 결과
toy_project 라는 데이터베이스가 잘 만들어진 것을 확인 할 수 있습니다.
show databases;
flask 설정
PIP 패키지 설치
# mysql 연결
pip install mysqlclient
# orm 사용
pip install -U Flask-SQLAlchemy
# flask migrate 기능 사용
pip install Flask-Migrate
# dotenv 보안을 위해 사용
pip install python-dotenv
init 파일 코드 추가 및 수정
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
# config
config = app.config.get('ENV')
if config == 'production':
app.config.from_object('config.ProductionConfig')
elif config == 'testing':
app.config.from_object('config.TestingConfig')
else:
app.config.from_object('config.DevelopmentConfig')
# database
from toy.models import example_models
db.init_app(app)
migrate.init_app(app, db)
# routes list
from .routes import routes_list
routes_list(app)
@app.route('/')
def hello_world():
return 'hello world!'
return app
root 위치에 .env 파일 생성 및 작성
- 세션 쿠키 또는 각종 보안이 필요한 사항에 사용할 SECRET_KEY 생성
python -c 'import secrets; print(secrets.token_hex())'
# 터미널에 입력하면 다음과 같이 secret key에 사용할 토큰이 생성됩니다
# 02640a6a320bd20a02aaefa29329acddb70b7144e0d75d5c6348d0daf5e12ba5
# normal
SECRET_KEY='02640a6a320bd20a02aaefa29329acddb70b7144e0d75d5c6348d0daf5e12ba5'
# database develop
DB_USER='admin'
DB_PWD='password'
DB_HOST='127.0.0.1'
DB_PORT='3306'
DB_NAME='toy_project'
# database product
DB_PRODUCT_USER='admin'
DB_PRODUCT_PWD='password'
DB_PRODUCT_HOST='127.0.0.1'
DB_PRODUCT_HOST='127.0.0.1'
DB_PRODUCT_PORT='3306'
DB_PRODUCT_NAME='toy_project'
root 위치에 config.py 파일 생성 및 작성
추후 develop과 production 을 나누기 위해 다음과 같이 설정합니다
from dotenv import load_dotenv
import os
# .env 파일 auto load
load_dotenv()
class Config(object):
TESTING = False
SECRET_KEY = os.getenv('SECRET_KEY')
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = f"mysql://{os.getenv('DB_USER')}:" \
f"{os.getenv('DB_PWD')}@" \
f"{os.getenv('DB_HOST')}:" \
f"{os.getenv('DB_PORT')}/" \
f"{os.getenv('DB_NAME')}?charset=utf8"
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = f"mysql://{os.getenv('DB_USER')}:" \
f"{os.getenv('DB_PWD')}@" \
f"{os.getenv('DB_HOST')}:" \
f"{os.getenv('DB_PORT')}/" \
f"{os.getenv('DB_NAME')}?charset=utf8"
class TestingConfig(Config):
TESTING = True
toy.models.example_models.py 추가
from toy import db
class ExampleUser(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30), nullable=False)
def __repr__(self):
return '<ExampleUser %r>' % self.name
생성한 모델 db 생성 및 migrate
터미널에서 다음 순서대로 입력합니다
flask db init
flask db migrate
flask db upgrade
MySql Workbench 확인 결과
example_user 테이블이 생성된 것을 확인 가능합니다
728x90
'Programming > Backend' 카테고리의 다른 글
5.Flask sqlalchemy - get, create (0) | 2022.05.29 |
---|---|
4.Flask restx 적용 + Swagger (0) | 2022.05.29 |
2.Flask MVC 패턴 환경 구축과 Blueprint (0) | 2022.04.22 |
1.Flask 웹 서버 구축 시작 (0) | 2022.04.20 |
MariaDB + SQLAlchemy + Flask에서 database 연결 끊김 현상 (0) | 2022.03.21 |