SQLAlchemy
Python에서 데이터베이스를 다루기 위한 ORM(Object Relational Mapping) 라이브러리.
- ORM 기능 : SQL문 작성 없이 Python 클래스/객체와 데이터베이스 테이블/레코드 매핑 가능.
- SQL 표현식 언어 : SQL을 Python 코드로 표현 가능.
- 다양한 DB 지원 (MySQL, PostgreSQL, SQLite, Oracle 등)
1. Create_engine
Engine 객체를 통해 DB와 연결. ( PostgreSQL )
from sqlalchemy import create_engine
engine = create_engine("postgresql+psycopg2://user:password@localhost:5432/mydb")
2. MetaData, Table (Core 방식)
기존 DB 테이블을 리플렉션(Reflection)해서 가져오는 방식.
from sqlalchemy import MetaData, Table
metadata = MetaData()
# 기존 user 테이블 가져오기
user_table = Table("user", metadata, autoload_with=engine)
# INSERT 실행
with engine.begin() as conn:
stmt = insert(user_table).values(id=1, name="Alice")
conn.execute(stmt)
=> 쿼리 빌더 함수를 이용해서 SQL문을 실행. ( JPA의 JPQL/NativeQuery 와 비슷 )
3. ORM 방식 (Session 활용)
Base 클래스를 상속받아 정의하면 자동으로 테이블과 매핑.
Session을 통해 트랜잭션 단위로 객체 관리. (commit, rollback 가능)
from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String)
# 세션 준비
SessionLocal = sessionmaker(bind=engine)
session = SessionLocal()
# 데이터 추가
new_user = User(name="Alice")
session.add(new_user)
session.commit()
=> 세션에 객체를 추가하여 커밋. ( JPA의 EntityManager + 엔티티와 비슷 )
'Python > 공부공부' 카테고리의 다른 글
| [Python] PYTHONPATH 설정, __init__.py 파일, 실행명령어 (0) | 2025.09.04 |
|---|---|
| [Python] SQLAlchemy 업서트(upsert) - PostgreSQL (0) | 2025.09.01 |
| [Python] ast.literal_eval() (0) | 2025.07.02 |
| [Python] top-level 코드 ( import시점 & runtime 시점 ) (0) | 2025.05.05 |
| [Python] 패킹(Packing) & 언패킹(Unpacking) (0) | 2025.03.26 |