[SQLAlchemy] Python과 SQL 데이터베이스 연동하기 (postgresql)
개요
데이터베이스와 파이썬을 연결하는 방법에는 여러 가지가 있지만, SQLAlchemy는 파이썬과 SQL 데이터베이스를 연동할 때 자주 사용되는 라이브러리 중 하나다. 이 글에서는 SQLAlchemy를 활용하여 PostgreSQL 데이터베이스와 연동하는 방법을 설명한다. 설치부터 데이터 조작까지, SQLAlchemy의 기초를 배우는 데 필요한 모든 내용을 단계별로 다룬다.
1. SQLAlchemy란?
SQLAlchemy는 파이썬의 SQL 툴킷이자 Object Relational Mapper(ORM)이다. ORM은 객체 지향 프로그래밍 언어에서 데이터베이스와의 연결을 쉽게 만들어주는 도구로, SQL 쿼리를 작성하지 않고도 데이터베이스를 조작할 수 있게 한다. SQLAlchemy는 데이터베이스를 ORM 방식으로 접근할 수 있게 해주며, 복잡한 SQL 문을 간단한 파이썬 코드로 대체할 수 있도록 한다.
2. 사용하기 위한 준비 (설치방법, PostgreSQL 기준)
SQLAlchemy와 PostgreSQL 연동을 위해 관련 라이브러리를 설치해야 한다. 필요한 것은 sqlalchemy
와 psycopg2
이다. 터미널에서 다음 명령어로 설치할 수 있다.
pip install sqlalchemy psycopg2
이제 PostgreSQL과 SQLAlchemy를 파이썬에서 사용할 수 있다.
3. 데이터 불러오기 (SELECT 문)
데이터를 불러오기 위해서는 먼저 데이터베이스와 연결하고, 원하는 테이블의 데이터를 가져와야 한다. 여기서는 SQLAlchemy의 create_engine
과 session
을 사용하여 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는 강력한 기능과 유연성을 제공하기 때문에, 복잡한 데이터베이스 작업에서도 매우 유용하게 활용할 수 있다.