Python으로 DB 연결 실습 예제 - SQLAlchemy 활용법

목차
현대의 데이터 중심 사회에서 데이터베이스와의 연결은 필수적인 기술입니다. 특히 Python은 강력한 데이터 처리 능력 덕분에 많은 개발자들에게 사랑받고 있습니다. 이번 글에서는 Python으로 데이터베이스에 연결하는 방법에 대해 실습 예제를 통해 알아보겠습니다. 주로 사용될 라이브러리인 SQLAlchemy는 ORM(Object Relational Mapper) 기능을 제공하여 SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있는 강력한 도구입니다. 이러한 SQLAlchemy를 이용해 데이터베이스와 연결하는 방법을 단계별로 살펴보도록 하겠습니다.
SQLAlchemy는 다양한 데이터베이스를 지원하며, 코드로 데이터베이스를 다룰 수 있게 해 줍니다. 이번 글에서는 SQLAlchemy를 사용하여 SQLite 데이터베이스에 연결하는 방법과 간단한 쿼리를 실행하는 과정을 실습해 보겠습니다. 이러한 기본적인 사용법을 통해 데이터베이스와의 연결 및 데이터 조작을 익힐 수 있습니다. 이제부터 본격적으로 SQLAlchemy 설치와 데이터베이스 연결 방법을 알아보겠습니다.
1. SQLAlchemy 설치하기
SQLAlchemy를 사용하기 위해서는 먼저 해당 라이브러리를 설치해야 합니다. Python 패키지 관리 도구인 pip를 사용하여 손쉽게 설치할 수 있습니다. 아래의 명령어를 터미널에 입력하여 SQLAlchemy를 설치해 보세요.
- pip install SQLAlchemy
- pip install sqlite
위 명령어를 입력하면 SQLAlchemy와 SQLite 관련 패키지가 설치됩니다. 설치가 완료되면, Python 코드에서 SQLAlchemy를 사용할 준비가 됩니다. SQLAlchemy를 설치한 후에는 정상적으로 설치되었는지 확인하는 것이 좋습니다. 아래의 명령어로 설치 여부를 확인할 수 있습니다.
- python -m pip show SQLAlchemy
- python -c "import sqlalchemy; print(sqlalchemy.__version__)"
2. 데이터베이스 연결하기
SQLAlchemy를 이용하여 SQLite 데이터베이스에 연결하는 방법을 알아보겠습니다. SQLite는 경량의 데이터베이스로, 특별한 서버 설정 없이 파일로 데이터베이스를 운영할 수 있습니다. 아래의 코드를 통해 SQLite 데이터베이스에 연결하는 방법을 살펴보겠습니다.
코드 예시:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db')
connection = engine.connect()
print("데이터베이스에 연결되었습니다.")
connection.close()
위 코드에서 create_engine() 함수를 이용하여 SQLite 데이터베이스 파일을 생성하고 연결합니다. 데이터베이스 파일이 존재하지 않으면 자동으로 생성됩니다. 연결이 성공적으로 이루어지면 "데이터베이스에 연결되었습니다."라는 메시지가 출력됩니다.
3. 테이블 모델 정의하기
SQLAlchemy를 사용하여 데이터베이스의 테이블 모델을 정의하는 방법을 소개합니다. ORM 방식을 사용하면 SQLAlchemy의 Python 클래스를 통해 데이터베이스 테이블을 정의할 수 있습니다. 아래는 사용자 정보를 저장할 User 테이블을 정의하는 예시입니다.
코드 예시:
from sqlalchemy import Column, Integer, String, Sequence
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
age = Column(Integer)
def __repr__(self):
return f"<user(name='{self.name}', age="{self.age})">" </user(name='{self.name}',>
이 코드에서 User 클래스는 Base 클래스를 상속받아 정의된 테이블 모델입니다. 각 속성은 데이터베이스의 칼럼으로 매핑되고, __repr__() 메서드는 객체의 표현을 정의합니다.
4. 데이터 추가하기
정의한 User 테이블에 데이터를 추가하는 방법을 살펴보겠습니다. SQLAlchemy를 통해 ORM을 활용해 손쉽게 데이터를 추가할 수 있습니다. 아래의 코드를 통해 데이터를 삽입하는 방법을 보겠습니다.
코드 예시:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name='Alice', age=30)
session.add(new_user)
session.commit()
print("사용자 정보가 추가되었습니다.")
session.add() 메소드를 사용하여 새로운 사용자 정보를 추가하고, session.commit() 메서드로 데이터베이스에 반영합니다. 이를 통해 User 테이블에 새로운 레코드가 추가됩니다.
5. 데이터 조회하기
이제 추가된 데이터를 조회하는 방법을 알아보겠습니다. SQLAlchemy를 사용하면 간단하게 데이터를 조회할 수 있습니다. 아래의 코드를 통해 User 테이블에서 모든 사용자 정보를 조회해 보겠습니다.
코드 예시:
users = session.query(User).all()
for user in users:
print(user)
session.query(User). all() 메서드를 사용하여 모든 사용자 정보를 가져오고, 반복문을 통해 각 사용자의 정보를 출력합니다.
6. 데이터 수정하기
조회한 데이터를 수정하는 방법도 알아보겠습니다. 특정 사용자의 정보를 변경할 수 있으며, 수정 후 반드시 commit() 메소드를 호출하여 변경사항을 반영해야 합니다. 아래의 코드를 통해 데이터 수정을 실습해 보겠습니다.
코드 예시:
user_to_update = session.query(User). filter_by(name='Alice'). first()
user_to_update.age = 31
session.commit()
print("사용자 정보가 수정되었습니다.")
filter_by() 메서드를 사용하여 특정 조건에 맞는 사용자 정보를 조회한 후, 해당 사용자의 나이를 변경하고 commit()하여 수정된 내용을 저장합니다.
7. 데이터 삭제하기
마지막으로, 추가한 데이터를 삭제하는 방법을 소개합니다. SQLAlchemy를 사용하여 특정 사용자를 삭제할 수 있습니다. 아래의 코드를 통해 데이터를 삭제하는 방법을 살펴보겠습니다.
코드 예시:
user_to_delete = session.query(User). filter_by(name='Alice'). first()
session.delete(user_to_delete)
session.commit()
print("사용자 정보가 삭제되었습니다.")
session.delete() 메서드를 사용하여 특정 사용자를 삭제하고, commit()으로 변경사항을 반영합니다. 이렇게 하면 User 테이블에서 해당 사용자의 정보가 삭제됩니다.
8. 결론
이번 글에서는 Python을 활용하여 SQLAlchemy로 데이터베이스에 연결하고, 기본적인 CRUD(Create, Read, Update, Delete) 작업을 수행하는 방법을 알아보았습니다. SQLAlchemy를 사용하면 데이터베이스의 구조와 관계를 Python 객체로 쉽게 모델링할 수 있어, 데이터베이스 작업의 효율성을 높일 수 있습니다.
이와 같은 실습을 통해 데이터베이스와의 연결 및 조작에 대한 이해를 높일 수 있으며, 앞으로의 프로젝트에서도 SQLAlchemy를 통해 데이터베이스와 원활하게 작업할 수 있을 것입니다. 데이터베이스와의 연결은 개발자에게 매우 중요한 기술이니, 지속적으로 연습하여 실력을 향상하시기 바랍니다.
FAQ
- Q: SQLAlchemy는 어떤 데이터베이스를 지원하나요?
A: SQLAlchemy는 MySQL, PostgreSQL, SQLite, MariaDB 등 다양한 관계형 데이터베이스를 지원합니다.
- Q: 데이터베이스 연결 시 어떤 오류가 발생할 수 있나요?
A: 데이터베이스 연결 시 잘못된 연결 문자열, 가상환경 미설정, 필요한 패키지 미설치 등의 오류가 발생할 수 있습니다.
- Q: ORM 방식과 Raw SQL 방식의 차이는 무엇인가요?
A: ORM 방식은 SQLAlchemy의 객체를 통해 데이터베이스를 조작하는 방식이며, Raw SQL 방식은 SQL 쿼리를 직접 작성하여 데이터베이스를 다루는 방식입니다.