[Python] SQLAlchemy ORM활용 Update Table

반응형

Pyhon Logo

 

* 전체 코드: mysql DB에서 __table1id가 'fq48'인 행에 대해, name 컬럼을 'Success!!'로 바꾸는 코드

from sqlalchemy import create_engine, MetaData, Table
engine = create_engine('mysql+pymysql://[사용자]:[비밀번호]@[ip주소:포트]/[DB이름]')
mytable = Table('__table1', MetaData(), autoload=True, autoload_with=engine)
qr = mytable.update().where(mytable.c.id=='fq48').values(name='Success!!')
engine.execute(qr)

 

Contents

    1. 배경

    Python을 이용해 DataBase의 테이블을 불러와서 Update 쿼리를 사용하고 싶은 경우가 있습니다. DataBase의 값을 Python의 로직을 거쳐 자유롭게 바꿀 수 있는 방법을 알아보겠습니다.

     

    2. 기본 예시

    1) 라이브러리 import 및 engine 생성

    from sqlalchemy import create_engine, MetaData, Table
    engine = create_engine('mysql+pymysql://[사용자]:[비밀번호]@[ip주소:포트]/[DB이름]')

    sqlalchemy라이브러리의 create_engine과 MetaData, Table 메서드를 import 합니다. create_engine은 DB의 ip주소 포트 정보 및 ID, PassWord를 입력하여 DB에 접속할 수 있는 engine 객체를 생성하는 메서드입니다. 

     

    2) DB에서 테이블 불러오기

    mytable = Table('__table1', MetaData(), autoload=True, autoload_with=engine)

    Table('테이블 이름', MetaData(), autoload=True, autoload_with=engine)을 통해 테이블을 불러옵니다. MetaData()는 구성된 테이블, 열, 제약조건 등의 객체 정보를 담고 있습니다. 입력으로 넣어줘야 작동합니다. autoload는 말 그대로 자동으로 load 한다는 의미이고, autoload_with=engine은 위에서 생성한 engine 객체를 기반으로 DB의 테이블을 자동으로 load 한다는 의미입니다.

     

    3) 쿼리 날리기

    qr = mytable.update().where(mytable.c.id=='fq48').values(name='Success!!')
    engine.execute(qr)

    위에서 생성한 mytable 객체에 update() 메서드를 호출하고 쿼리에서 where처럼 조건문을 통해 mytable.c.id(mytable의 column 중 id인 것)가 'fq48'인 행에 대해 values메서드를 통해 name 컬럼을 'Success!!'로 바꿔주는 쿼리입니다. 쿼리는 따로 engine.execute(쿼리)를 해줘야 데이터베이스에 반영됩니다.

    (아래 *결과왼쪽은 쿼리날리기 전 __table1이고, 오른쪽은 쿼리날린 후 __table1 입니다.)

    * 코드 실행

    table 생성 및 query 실행

    * 결과

    왼쪽: 쿼리날리기전, 오른쪽: 쿼리날린후

     

     

    3. 결론

    engine을 통해 DB에서 __table1 정보를 불러오고, sqlalchemy의 update를 이용해 fq48의 name을 Success!로 수정하는 예제를 통해, python으로 DB의 테이블을 수정하는 방법을 알아보았습니다.

    다음에 더 좋은 글로 찾아오겠습니다.
    읽어주셔서 감사합니다.

     

     

    Reference)
    1. Python Logo : https://www.redbubble.com/i/pin/Python-logo-by-Shirtupme/46071453.NP9QY 
    반응형

    댓글

    Designed by JB FACTORY