sqlalchemy vs pymysql

codakcodak·2024년 2월 23일
0

fastapi

목록 보기
1/2

sqlalchemy

  • orm기능을 제공하는 python의 라이브러리

  • 사용법

    • baseClass
    from sqlalchemy.orm import declarative_base
    Base=declarative_base()
    • class-table mapping
    class ToDo(Base):
    __tablename__="todo"	#mapping 할 테이블의 이름을 명시
    id=Column(Integer,primary_key=True,index=True)
    contents=Column(String(256),nullable=False)
    is_done=Column(Boolean,nullable=False)
    • get connection
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    DATABASE_URL="mysql+pymysql://root:root@127.0.0.1:3306/todos"
    
    engine=create_engine(DATABASE_URL,echo=True)#echo는 query가 처리될 때 사용된 sql를 print
    SessionFactory=sessionmaker(autocommit=False,autoflush=False,bind=engine) #사용자가 직접 commit을 하여 db에 적용
    
    def get_db(): #사용한 connection은 close호출하여 안전하게 제거
        session=SessionFactory()
        try:
            yield session
        finally:
            session.close()
    • query
    from sqlalchemy.orm import Session
    from typing import List
    from sqlalchemy import select,delete
    from database.orm import ToDo
    #모든 row들을 조회
    def get_todos(session:Session)->List[ToDo]:
        select(ToDo)
        return list(session.scalars(select(ToDo)))
    #todo_id가 일치하는 row 조회
    def get_todo_by_todo_id(session:Session,todo_id:int)->ToDo | None:
        return session.scalar(select(ToDo).where(ToDo.id==todo_id))
    #row 생성
    def create_todo(session:Session,todo:ToDo)->ToDo:
        session.add(instance=todo)
        session.commit()# db save
        session.refresh(instance=todo) # db read->todo_id
        return todo
    #row 변경
    def update_todo(session:Session,todo:ToDo)->ToDo:
        session.add(instance=todo)
        session.commit()# db save
        session.refresh(instance=todo) # db read->todo_id
        return todo
    #row 제거
    def delete_todo(session:Session,todo_id:int)->None:
        session.execute(delete(ToDo).where(ToDo.id==todo_id))
        session.commit()

pymysql

  • mysql을 python에서 사용할 수 있는 라이브러리

  • 사용법

    • db definition
    import pymysql
    db = pymysql.connect(host='funcoding-db.ca1fydhpobsc.ap-northeast-2.rds.amazonaws.com', port=3306, user='davelee', passwd='korea123', db='student_mgmt', charset='utf8')
    • get cursor and query
    cursor = db.cursor()
    # SQL 문 만들기
    sql = '''
                CREATE TABLE korea2 (
                       id INT UNSIGNED NOT NULL AUTO_INCREMENT,
                       name VARCHAR(20) NOT NULL,
                       model_num VARCHAR(10) NOT NULL,
                       model_type VARCHAR(10) NOT NULL,
                       PRIMARY KEY(id)
                );
            '''
    # 실행하기
    cursor.execute(sql)
    # DB에 Complete 하기
    db.commit()
    # DB 연결 닫기
    db.close()

sqlalchemy vs pymysql

  • SQLAlchemy의 Session은 ORM을 통한 객체 지향적인 데이터베이스 상호 작용을 제공 하며 3가지의 방법이 있다.
    • engine.connect()
    • sessionmaker(bind=self.engine, autocommit=False)
      engine을 활용한 dataframe.to_sql()
  • pymysql의 Connection은 저수준의 SQL 쿼리 실행 및 데이터베이스와의 직접적인 상호 작용을 제공합니다.
    • conn.cursor()
profile
숲을 보는 코더

0개의 댓글