Programming/Python

[SQLAlchemy] Python과 SQL 데이터베이스 연동하기 (postgresql)

사족보행 개발자 2024. 10. 12. 23:58
728x90

개요

데이터베이스와 파이썬을 연결하는 방법에는 여러 가지가 있지만, SQLAlchemy는 파이썬과 SQL 데이터베이스를 연동할 때 자주 사용되는 라이브러리 중 하나다. 이 글에서는 SQLAlchemy를 활용하여 PostgreSQL 데이터베이스와 연동하는 방법을 설명한다. 설치부터 데이터 조작까지, SQLAlchemy의 기초를 배우는 데 필요한 모든 내용을 단계별로 다룬다.

 

1. SQLAlchemy란?

SQLAlchemy는 파이썬의 SQL 툴킷이자 Object Relational Mapper(ORM)이다. ORM은 객체 지향 프로그래밍 언어에서 데이터베이스와의 연결을 쉽게 만들어주는 도구로, SQL 쿼리를 작성하지 않고도 데이터베이스를 조작할 수 있게 한다. SQLAlchemy는 데이터베이스를 ORM 방식으로 접근할 수 있게 해주며, 복잡한 SQL 문을 간단한 파이썬 코드로 대체할 수 있도록 한다.

 

2. 사용하기 위한 준비 (설치방법, PostgreSQL 기준)

SQLAlchemy와 PostgreSQL 연동을 위해 관련 라이브러리를 설치해야 한다. 필요한 것은 sqlalchemypsycopg2이다. 터미널에서 다음 명령어로 설치할 수 있다.

pip install sqlalchemy psycopg2

이제 PostgreSQL과 SQLAlchemy를 파이썬에서 사용할 수 있다.

 

3. 데이터 불러오기 (SELECT 문)

데이터를 불러오기 위해서는 먼저 데이터베이스와 연결하고, 원하는 테이블의 데이터를 가져와야 한다. 여기서는 SQLAlchemy의 create_enginesession을 사용하여 PostgreSQL 데이터베이스와 연결한 후 데이터를 불러오는 예제를 보여준다.

from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker

# 데이터베이스 연결 설정
DATABASE_URL = "postgresql+psycopg2://username:password@localhost:5432/mydatabase"
engine = create_engine(DATABASE_URL)

# 세션 생성
Session = sessionmaker(bind=engine)
session = Session()

# 테이블 접근하기 위해 메타데이터 사용
metadata = MetaData(bind=engine)
my_table = Table('my_table_name', metadata, autoload_with=engine)

# 데이터 선택 (SELECT)
select_stmt = my_table.select()
results = session.execute(select_stmt)

for row in results:
    print(row)

이렇게 하면 PostgreSQL에 있는 my_table_name 테이블에서 모든 데이터를 불러올 수 있다.

 

4. 데이터 삭제 방법 (DELETE)

특정 데이터를 삭제하려면 SQLAlchemy의 delete() 메서드를 사용한다. 다음은 데이터를 삭제하는 간단한 예제이다.

from sqlalchemy import delete

# 특정 조건에 맞는 데이터 삭제
delete_stmt = delete(my_table).where(my_table.c.id == 1)
session.execute(delete_stmt)
session.commit()

위의 예제는 id가 1인 레코드를 삭제한다. 데이터를 삭제한 후 반드시 session.commit()을 호출하여 변경 사항을 데이터베이스에 반영해야 한다.

 

5. 데이터 업데이트 방법 (UPDATE)

데이터를 업데이트하는 방법도 비슷하다. update() 메서드를 이용해 특정 데이터를 수정할 수 있다.

from sqlalchemy import update

# 특정 데이터를 업데이트
update_stmt = update(my_table).where(my_table.c.id == 1).values(name='new_name')
session.execute(update_stmt)
session.commit()

위의 예제는 id가 1인 레코드의 name 값을 'new_name'으로 변경한다.

 

6. 데이터 삽입 방법 (INSERT)

새로운 데이터를 삽입하기 위해서는 insert() 메서드를 사용한다. 다음은 데이터를 삽입하는 예제이다.

from sqlalchemy import insert

# 데이터 삽입
insert_stmt = insert(my_table).values(id=2, name='sample_name')
session.execute(insert_stmt)
session.commit()

위의 코드에서는 id가 2이고 name'sample_name'인 레코드를 테이블에 삽입한다.

 

7. Pandas로 데이터 조작하기

SQLAlchemy는 pandas와도 잘 연동된다. pandas 라이브러리를 사용하여 데이터를 DataFrame으로 불러오거나 저장할 수 있다. 먼저, pandas를 설치하고 다음과 같이 활용할 수 있다.

pip install pandas
import pandas as pd

# 테이블 데이터를 DataFrame으로 불러오기
query = session.query(my_table)
df = pd.read_sql(query.statement, session.bind)
print(df)

# DataFrame 데이터를 테이블에 삽입하기
data = {'id': [3, 4], 'name': ['Alice', 'Bob']}
df_to_insert = pd.DataFrame(data)
df_to_insert.to_sql('my_table_name', con=engine, if_exists='append', index=False)

위의 예제에서는 SQLAlchemy로 데이터를 쿼리한 후 Pandas의 DataFrame으로 변환하거나, DataFrame 데이터를 데이터베이스에 삽입하는 방법을 보여준다.

 

8. 전체적인 정리

지금까지 SQLAlchemy를 사용하여 파이썬과 PostgreSQL을 연동하는 방법을 살펴보았다. 데이터베이스에 연결하고 데이터를 조회, 삽입, 업데이트, 삭제하는 기본적인 작업을 수행할 수 있었다. 또한, Pandas와 결합하여 데이터 처리를 더욱 쉽게 할 수 있었다. SQLAlchemy는 ORM으로 객체 지향적인 접근이 가능하므로, SQL 쿼리를 직접 작성하지 않고도 데이터베이스와의 상호작용을 간편하게 할 수 있다.

이 내용을 잘 이해하고 연습한다면 파이썬을 사용한 데이터베이스 조작을 효율적으로 수행할 수 있을 것이다. SQLAlchemy는 강력한 기능과 유연성을 제공하기 때문에, 복잡한 데이터베이스 작업에서도 매우 유용하게 활용할 수 있다.

728x90