본문 바로가기

SQLAlchemy로 이미 있는 데이터베이스(기존 테이블) 사용하기

ironwhale 2022. 7. 5.

SQLAlchemy로 이미 있는 MySQL 의 기존 테이블 사용하기

 

python으로 MySQL이나 SQLite, Postgres를 사용하기위해 SQLALCHEMY 다시 공부하고 있습니다.
그러던 중 dbeaver를 이용해 기존 테이블을 sqlalchemy 가지고 오는 방법이 필요하여 이번 포스팅으로 작성하면서 머릿속을 정리해 보았습니다.

이걸 알아보면서 그냥 PyMySQL로 할까 말까 하다가 제 나름대로 기준을 어느걸 쓸지 조건을 정해보았습니다.

FASTAPI를 쓸데는 sql알케미로 그외에 단순 작업할때는 PyMySQL을 사용하려 합니다.
물론 이 기준은 언제 다시 바뀔지 모르지만...
일단 SQLALchmey로 기존에 있는 DB에 접속하여 사용하는 방법은 찾아보기 어려워 제가 한번 정리해보았습니다.
 
그리고 여차하면 그냥 text()를 사용해서 SQL문을 작성할수도 있습니다.

SQLALchmey로는 이미 존재하는 데이터베이스의 테이블의 접속하여 사용하는 방법은 ORM형식으로 하는 방법은 찾기가 어려워고 스택 오버플로우(stack overflow)에 CORE를 이용한 사용법이 있어 정리해보았습니다. 혹시나 다른 더 좋은 방법을 알고 계신분은 알려주시면 감사하겠습니다.


필요한 라이브러리부터

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from sqlalchemy import Table, MetaData
from sqlalchemy import insert, delete
  • 두줄은 엔진과 세션 만들어주는 SQLAlchemy 사용에 기본적인 부분입니다.
  • 아래 두줄은 이미 만들어진 데이터베이스의 테이블을 사용하는데 필요한 부분입니다.

엔진과 세션 생성

SQL_URL = 'mysql+pymysql://ID:PassWord@ServerAddress:Port/DB_NAME'
engine = create_engine(SQL_URL, echo=True)

metadata_obj = MetaData(bind=engine)

SessionLocal = sessionmaker(autocommit=False,autoflush=False,bind=engine)
db = SessionLocal()
  • 첫 두줄은 엔진을 생성하는 부분입니다.
    • 이번에는 mysql을 이용해보기위해 주소를 SQL_URL = 'mysql+pymysql://ID:PassWord@ServerAdress:Port/DB_NAME' 입력합니다.
  • metadata_obj = MetaData(bind=engine) 이부분은 후에 테이블이 객체를 생성할때 사용합니다.
  • sessionmaker로 세션 객체를 만들고 db 인스턴스를 생성합니다.

테이블 객체 생성

  • 이미 만들어진 데이터베이스에서 테이블을 가지고 오는 부분입니다.
  • 공식문서의 이 부분을 참조하였습니다.
some_table = Table("heat_price", metadata_obj, autoload_with=engine)
  • some_table이라는 인스턴스를 생성하였고 이것과 db(세션)을 이용하여 이미 있는 테이블에 데이터를 입력, 출력, 수정, 삭제를 할수 있습니다.
  • some_table.c 로 테이블 컬럼에 접근합니다. 만약 date 컬럼이 있으면 some_table.c.date로 입력하면 됩니다.

본격적인 데이터 입력, 출력, 수정, 삭제

크게 어렵지 않습니다. 복잡한 기능 설명보다는 간단한 예제를 정리하였고 참조한 공식문서의 링크도 각각 작성하였으니 자세한 내용은 링크로 가셔서 보시면 될거 같습니다.

데이터 입력하기(Create, insert)

  • 공식문서의 이곳을 참조하였습니다.
stmt = insert(some_table).values(heat_date='2022-1-1',price=5555)
db.execute(stmt)
db.commit()
db.close()

데이터 불러오기(Read, Select)

  • 공식문서의 이곳을 참조 하였습니다.
stmt = select(some_table)
datas = db.execute(stmt)
for data in datas:
    print(data.heat_date,data.price)

데이터 수정하기(Update)

  • 공식문서의 이곳을 참조하였습니다.
stmt =
 update(some_table).where(some_table.c.heat_date=='2022-1-1').values(heat_date='2022-1-2',price=2222)
db.execute(stmt)
db.commit()
db.close()

데이터 삭제하기(Delete)

  • 공식문서의 이곳을 참조하였습니다.
stmt = delete(some_table).where(some_table.c.heat_date == '2021-1-1')
db.execute(stmt)
db.commit()
db.close()
  • 기존 SQL문을 쓰시는 분은 위에 where 절이 친숙하실 겁니다.

 


2022.07.04 - FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 - 1탄

FASTAPI 사용을 위한 SQLAlchemy(ORM) 기초 - 1탄

다시 정리하는 SQL 알케미 본 내용은 https://fastapi.tiangolo.com/ko/tutorial/sql-databases/ 해당 링크의 설명과 공식문서를 참조하였습니다. 이전에 2021.08.16 - SQLALCHEMY를 이용한 PostgreSQL 사용법 을..

jh-industry.tistory.com

 

댓글