[FLASK] DB 조회 하기

마루스·2023년 8월 2일
0

flask

목록 보기
1/2

파이썬 코드에서 DB 조회를 하려면?

  • SQLAlchemy
  • ORM (Object Relational Mapper): 관계형 DB의 테이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것
  • ORM 부분 말고 DB와 연결만 하려면 CORE부분만 사용하면 됨

SQLAlchemy에서 MySQL을 사용하려면?

  • MySQL DB API: MySQL-Connector
  • 아래와 같이 URL을 사용하여 웹사이트에 접속하듯이 DB URL을 통해 접속 (접속하는건 SQLAlchemy create_engine 통해서)
  • dburl = f”mysql+mysqlconnector://{username}:{password}@{host}:{port}/{database}?charset=utf8”
  • 접속정보는 config.py 파일에 따로 저장하기

SQLAlchemy통해 API와 DB를 연결하려면?

  • config.py 파일 만드는 이유
    • 설정정보 따로 관리해서 개인정보 노출 x
    • 각 환경과 설정에 맞는 설정 파일 적용 → .gitignore 파일에 넣어서 git 레포지토리에 포함 x → 개인정보 노출을 막고 각 개발 호스트 혹은 서버에 맞는 config.py 파일 생성하게

|-config.py

|-app.py

config.py

db = {
    'user'     : 'user',
    'password' : 'password',
    'host'     : 'localhost',# 접속할 db 주소, 로컬이라 로컬호스트이고 외부이면 주소 필요
    'port'     : 3306, # rdb는 주로 3306 포트 통해 연결. db도 네트워크를 통해 연결되는 시스템이므로 포트 필수
    'database' : 'db_app' # 실제 사용할 db 이름
}

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

app.py

from flask      import Flask, request, jsonify, current_app
from flask.json import JSONEncoder
from sqlalchemy import create_engine, text

# ... 중략
def create_app(test_config = None): # 이 함수를 통해 flask 실행. test_config 인자 받아서 단위 테스트 할때 테스트용 db 등 설정 정보 입력.
    app = Flask(__name__)

    app.json_encoder = CustomJSONEncoder

    if test_config is None:
        app.config.from_pyfile("config.py")
    else:
        app.config.update(test_config) # 테스트 실행시 test config 정보 적용 

    database     = create_engine(app.config['DB_URL'], encoding = 'utf-8', max_overflow = 0) # db와 연결
    app.database = database # sqlalchemy db 객체를 flask 객체에 저장해서 이 함수 외부에서도 db 접속하게

# ... 중략
    return app  # create_app 함수는 flask가 자동으로 factory 함수로 인지해서 이 함수를 통해 flask 실행

# 팩토리 함수(Factory Function)란, 객체를 생성하여 반환하는 함수를 말합니다 (객체를 공장에서 처럼 찍어내서)
profile
세상의원리

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기