Flask Heroku Pandas Postgres 튜토리얼

Page content

강의 홍보

개요

  • Flask 기본적인 작동 원리를 배운다.
  • Postgres와 SQLAlchemy를 활용한다.
  • Heroku에 배포를 진행한다.

사전준비

  • Github에 각 개인에게 맞는 Github Repo를 생성한다.
    • 주의 : 반드시 Unique하게 작성해야 한다.
  • 가상환경 설정을 진행한다.
  • PostgreSQL DB 설정은 다음을 참조한다.
virtualenv venv
  • 주요 라이브러리를 설치한다.
pip install Flask psycopg2 SQLAlchemy pandas gunicorn

배포

  • 프로젝트 시작 전에는 항상 선 배포를 하고 시작한다.
  • app.py를 만들어본다.
# -*- coding: utf-8 -*-

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello World!"
  • 3개의 파일이 필요하다.

    • Procfile
    web: gunicorn app:app
    
    • runtime.txt
    python-3.9.12
    
    • requirements.txt 파일은 터미널에서 생성한다.
    pip freeze > requirements.txt
    
  • 이제 Heroku에 배포를 시작한다.

heroku login
heroku create your_project_repo
git add .
git commit -m "initial updated"
git push # github repo에 추가
git push heroku main

Untitled

  • 이렇게 정상적으로 나오는지 확인한다.

Postgres 설정

Untitled

Untitled

  • 설정 방법은 크게 2가지 있다.

    • CLI에서 설치하는 방법
    heroku addons:create heroku-postgresql:hobby-dev
    
    • Web UI를 통해 설치하는 방법
      • Install Heroku Postgres 버튼 클릭 후 아래 화면과 같이 본인에 맞는 프로젝트를 연결한다.

    Untitled

  • 이제 필요한 것은 URI 접속 경로이다.

    • Heroku Postgres를 클릭한다.

Untitled

  • 아래 화면에서, Settings 탭을 누른 후, View Credentials를 클릭한다.

Untitled

Untitled

테이블 생성 및 데이터 추가 및 조회

Local Version

  • Local 버전에서 iris 테이블을 불러온 후 PostgreSQL에 추가하는 코드를 app.py에 아래와 같이 추가한다.
# -*- coding: utf-8 -*-
from flask import Flask
import pandas as pd 
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

## DB 연결 Local
def db_create():
    # 로컬
		engine = create_engine("postgresql://postgres:1234@localhost:5432/chatbot", echo = False)
		
		# Heroku
		engine = create_engine("postgresql://mzgnoxixyinhjd:d7ac5c7c91e4b4b82bfbdc56dc09a762cf9025423f26c0d0d5d0a6a1a6442765@ec2-34-235-31-124.compute-1.amazonaws.com:5432/dfqa3qaa76tclf", echo = False)

    engine.connect()
    engine.execute("""
        CREATE TABLE IF NOT EXISTS iris(
            sepal_length FLOAT NOT NULL,
            sepal_width FLOAT NOT NULL,
            pepal_length FLOAT NOT NULL,
            pepal_width FLOAT NOT NULL,
            species VARCHAR(100) NOT NULL
        );"""
    )
    data = pd.read_csv('data/iris.csv')
    print(data)
    data.to_sql(name='iris', con=engine, schema = 'public', if_exists='replace', index=False)

app = Flask(__name__)

@app.route("/")
def index():
    db_create()
    return "Hello World!"

if __name__ == "__main__":
    db_create()
    app.run()
  • 이제 Flask 파일을 실행한 후, 정상적으로 DB가 들어가졌는지 확인한다.
python app.py

Untitled

Heroku Version

  • 이제 Heroku에 동일하게 파일을 올리도록 한다.
  • 이 때 변경할 것은 URI만 변경해주고 다시 Push 해준다.
git add .
git commit -m "initial updated"
git push # github repo에 추가
git push heroku main
  • 코드를 수정했기 때문에, 우선 웹사이트가 열리는지를 확인해야 한다.

Untitled

  • 이번에는 pg admin에 새로운 서버를 생성 후, 확인해본다. 먼저 아래와 같이 새로운 서버를 작성한다.

Untitled

  • 그 후에 본인에게 맞는 DB를 찾고 아래와 같이 조회가 되는지 확인한다.

Untitled