ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FastAPI에 pymysql(DB) 연결하기
    Today I Learned 2024. 8. 21. 20:00

    Q: 앞에서 무심코 사용한 uvicorn에 대한 이해가 필요하다.
    fast api는 GIL문제로 멀티스레딩으로 제대로 된 다중처리가 불가능 하다고 한다..?

    pymysql 에 연결하려면, 우선 Mysql을 설치해야한다.
    pymysql은 MySQL 서버에 연결하기 위한 클라이언트 라이브러리일 뿐이기에 MySQL 서버가 실행중이지 않으면, pymysql도 실행할 수 없다.

    1. MySQL 설치

    그러므로 먼저 MySQL을 설치한다.

    brew install mysql
    후에 밑에 참고 링크를 통해 mysql 설치 & 초기 설정을 해주었다!

    2. MySQL 데이터베이스 생성

    미리 mysql로 데이터베이스를 생성하고,
    pymysql 에서는 미리 생성된 데이터베이스에 연결 -> 데이터 CRUD 가 가능하게 된다.
    create database fastapi_test;

    위처럼 데이터베이스를 확인했으면 이제 pymysql로 연결하는 코드를 작성한다.

    3. pymysql 로 데이터베이스 연결 & 스키마 작성

    ## create_tables.py
    
    import pymysql
    
    def create_tables():
        # connect로 mysql 접속
        db = pymysql.connect(
            host='localhost',
            user='사용자이름',
            password='비밀번호',
            database='fastapi_test', # 데이터베이스 이름
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )
    
        try:
            with db.cursor() as cursor:
                # 데이터베이스와 테이블 생성
                cursor.execute("""
                CREATE TABLE IF NOT EXISTS users (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    name VARCHAR(255) NOT NULL,
                    email VARCHAR(255) UNIQUE NOT NULL,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
                """)
            db.commit()
        finally:
            # 연결해제
            db.close()
    
    if __name__ == "__main__":
        create_tables()

    python create_tables.py 로 테이블을 생성한 후
    터미널에서 mysql로 테이블 스키마가 생성됐는지 확인할 수 있다.

    • users 테이블 스키마 확인

    먼저 use fastapi_test; 로 현재 데이터베이스로 이동한 다음(git의 checkout 같은...)
    desc users; 로 users 테이블의 스키마를 확인한다.

    위와같이 잘 생성된 것을 확인할 수 있다.


    다음 글에 본격적으로 GET, POST, DELETE 로 테이블의 데이터 변경을 하려한다. 

    참고 자료

    Mysql 설치 및 테이블 생성하기

Designed by Tistory.