[파이썬] SQLAlchemy와 MySQL 활용

SQLAlchemy는 파이썬의 인기있는 ORM(Object-Relational Mapping) 라이브러리입니다. MySQL은 가장 널리 사용되는 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나입니다. SQLAlchemy를 사용하여 MySQL 데이터베이스와 상호작용하는 방법을 알아보겠습니다.

SQLAlchemy 설치

SQLAlchemy를 사용하기 위해 먼저 설치해야 합니다. 다음 명령어를 사용하여 SQLAlchemy를 설치합니다.

pip install SQLAlchemy

MySQL 특정 드라이버와 같이 사용하려면 해당 드라이버도 함께 설치해야 합니다. MySQL과의 연동을 위해 pymysql 드라이버를 설치하는 경우, 다음 명령어를 사용할 수 있습니다.

pip install pymysql

데이터베이스 연결

SQLAlchemy를 사용하여 MySQL 데이터베이스에 연결하기 위해 다음과 같이 코드를 작성할 수 있습니다.

from sqlalchemy import create_engine

# MySQL 연결 문자열 생성
connection_string = "mysql+pymysql://<username>:<password>@<hostname>/<database_name>"

# 데이터베이스와 연결
engine = create_engine(connection_string)

# 연결 테스트
with engine.connect() as connection:
    if connection:
        print("MySQL 연결 성공!")
    else:
        print("MySQL 연결 실패!")

위의 코드에서 <username>, <password>, <hostname>, <database_name>을 실제 값으로 변경해야 합니다. MySQL 서버에 연결되었는지 확인하기 위해 코드를 실행하고 적절한 메시지가 출력되는지 확인하세요.

테이블 작성

테이블을 작성하기 위해 SQLAlchemy 모델을 사용합니다. 예를 들어, members라는 테이블을 만들고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# Base 클래스 생성
Base = declarative_base()

# Members 클래스 정의
class Members(Base):
    __tablename__ = 'members'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    age = Column(Integer)

# 테이블 생성
Base.metadata.create_all(engine)

위의 코드에서 Members 클래스를 작성합니다. 클래스의 __tablename__ 속성은 테이블의 이름을 나타냅니다. 각 열은 클래스의 속성으로 표현되며, 열의 이름, 데이터 유형 및 제약 조건을 정의할 수 있습니다.

데이터 조회

데이터를 조회하기 위해 SQLAlchemy의 Session을 사용합니다. 다음은 members 테이블의 데이터를 조회하는 예시 코드입니다.

from sqlalchemy.orm import Session

# 세션 생성
session = Session(engine)

# 모든 멤버 조회
members = session.query(Members).all()

# 멤버 출력
for member in members:
    print(f"ID: {member.id}, Name: {member.name}, Age: {member.age}")

# 세션 닫기
session.close()

위의 코드에서 Session을 생성하고 Members 테이블의 모든 데이터를 조회합니다. 조회한 데이터는 반복문을 통해 출력됩니다. 작업이 완료된 후 세션을 닫아 리소스를 해제해야 합니다.

데이터 추가

데이터베이스에 새로운 데이터를 추가하기 위해 SQLAlchemy의 Session을 사용합니다. 다음은 새로운 멤버를 members 테이블에 추가하는 예시 코드입니다.

from sqlalchemy.orm import Session

# 세션 생성
session = Session(engine)

# 새로운 멤버 추가
new_member = Members(name='John', age=25)
session.add(new_member)
session.commit()

# 새로운 멤버의 ID 확인
print(f"New Member ID: {new_member.id}")

# 세션 닫기
session.close()

위의 코드에서 Session을 생성한 후, 새로운 멤버를 생성하고 session.add()를 사용하여 세션에 추가합니다. session.commit()은 변경 사항을 데이터베이스에 실제로 반영합니다. 추가된 멤버의 ID는 new_member.id로 확인할 수 있습니다.

데이터 업데이트 및 삭제

데이터를 업데이트하거나 삭제하기 위해서도 SQLAlchemy의 Session을 사용합니다. 다음은 데이터 업데이트와 삭제를 수행하는 예시 코드입니다.

from sqlalchemy.orm import Session

# 세션 생성
session = Session(engine)

# 멤버 정보 업데이트
member = session.query(Members).filter_by(id=1).first()
if member:
    member.name = 'John Doe'
    session.commit()
else:
    print('Member not found!')

# 멤버 삭제
member = session.query(Members).filter_by(id=2).first()
if member:
    session.delete(member)
    session.commit()
else:
    print('Member not found!')

# 세션 닫기
session.close()

위의 코드에서 session.query()를 사용하여 멤버를 조회하고, 조회된 멤버의 속성을 업데이트하거나 session.delete()를 사용하여 멤버를 삭제합니다. 변경 사항을 데이터베이스에 반영하기 위해 session.commit()을 호출합니다.

SQLAlchemy와 MySQL을 함께 사용하여 데이터베이스 작업을 수행하는 방법에 대해 알아보았습니다. SQLAlchemy의 강력한 기능을 활용하여 데이터베이스 관리 작업을 보다 쉽고 간편하게 수행할 수 있습니다.