메뉴 닫기

파이썬 SQLAlchemy Core insert select update delete 완벽 가이드

파이썬 SQLAlchemy Core insert select update delete 완벽 가이드

🚀 파이썬 데이터베이스 프로그래밍의 핵심, SQLAlchemy Core 표현식 언어를 쉽게 배워보세요

데이터베이스와 직접적으로 상호작용해야 하는 순간은 파이썬 개발자라면 누구나 맞이하게 됩니다.
특히 웹 서비스, 데이터 분석, 자동화 작업 등에서 데이터를 저장하고 불러오는 과정은 필수적이죠.
이때 SQL을 그대로 작성하기보다는 효율적이고 안전한 방법이 필요합니다.
그 답이 바로 SQLAlchemy Core입니다.
SQLAlchemy는 ORM 기능뿐 아니라 SQL 표현식 언어를 통해 insert, select, update, delete와 같은 기본 작업을 직관적으로 다룰 수 있는 도구를 제공합니다.
이 글에서는 기초 개념부터 실제 코드 예시까지, 초보자도 이해할 수 있도록 차근차근 안내해 드립니다.

단순히 SQL을 대체하는 것이 아니라, 더 안전하고 유연하게 데이터베이스를 다룰 수 있다는 점에서 SQLAlchemy Core는 많은 개발자들에게 사랑받고 있습니다.
이번 글에서는 insert로 데이터 추가하기, select로 조회하기, update로 수정하기, delete로 삭제하기를 실제 코드와 함께 알아보며, 프로그래밍 생산성과 가독성을 높이는 방법을 다룹니다.
마지막에는 자주 묻는 질문까지 정리해 드리니 끝까지 읽어보시면 큰 도움이 될 것입니다.



📝 SQLAlchemy Core 기본 개념 이해하기

SQLAlchemy는 파이썬에서 가장 널리 사용되는 데이터베이스 라이브러리 중 하나로, ORM(Object Relational Mapping) 기능뿐 아니라 SQL을 직접 다룰 수 있는 Core 표현식 언어를 제공합니다.
Core는 SQLAlchemy의 저수준 API로, SQL 구문을 파이썬 객체로 표현하여 보다 유연하고 명확하게 데이터베이스 작업을 수행할 수 있게 합니다.
이 방식은 SQL을 직접 작성하지 않고도 데이터베이스와 소통할 수 있다는 장점이 있습니다.

SQLAlchemy Core의 핵심은 Table 객체SQL 표현식 언어입니다.
Table 객체는 실제 데이터베이스의 테이블 구조를 코드로 정의하며, 컬럼, 타입, 제약 조건 등을 지정할 수 있습니다.
이후 insert, select, update, delete와 같은 메서드를 활용해 SQL을 작성하는 것처럼 직관적으로 데이터를 다룰 수 있습니다.

📌 SQLAlchemy Core의 주요 특징

  • ⚙️SQL 구문을 파이썬 객체로 표현 가능
  • 🛠️데이터베이스 독립적인 코드 작성이 가능하여 다양한 DB 엔진 지원
  • 🔒SQL 인젝션을 방지하는 안전한 쿼리 빌딩 제공
  • 📊ORM 없이도 데이터 조작 및 조회 가능

📌 기본 코드 예시

CODE BLOCK
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

engine = create_engine("sqlite:///example.db", echo=True)
metadata = MetaData()

users = Table(
    "users", metadata,
    Column("id", Integer, primary_key=True),
    Column("name", String),
    Column("age", Integer)
)

metadata.create_all(engine)

위 코드에서 보듯, SQLAlchemy Core는 데이터베이스 엔진을 생성하고, 테이블과 컬럼을 정의한 후 데이터베이스에 적용합니다.
이후 insert, select, update, delete를 통해 데이터를 조작할 수 있으며, 이러한 과정은 SQL을 직접 작성하는 것보다 훨씬 안전하고 직관적입니다.

📥 insert로 데이터 추가하기

데이터베이스에 새로운 데이터를 추가할 때 사용하는 구문이 바로 insert입니다.
SQLAlchemy Core의 insert는 SQL의 INSERT 구문을 객체지향적으로 표현해주며, 안전하게 데이터를 삽입할 수 있도록 도와줍니다.
파라미터 바인딩 방식이 기본 제공되므로, SQL 인젝션 공격을 예방할 수 있다는 점에서 매우 유용합니다.

📌 기본 insert 구문 사용법

CODE BLOCK
from sqlalchemy import insert
from sqlalchemy import create_engine

engine = create_engine("sqlite:///example.db")
conn = engine.connect()

stmt = insert(users).values(name="Alice", age=25)
conn.execute(stmt)
conn.commit()

위 예시는 users 테이블에 새로운 행을 추가하는 방법을 보여줍니다.
insert() 메서드에 values()를 연결해 원하는 컬럼과 값을 지정하면 됩니다.
commit()을 호출해야 실제 데이터베이스에 반영됩니다.

📌 여러 데이터 한번에 추가하기

CODE BLOCK
stmt = insert(users)
conn.execute(stmt, [
    {"name": "Bob", "age": 30},
    {"name": "Charlie", "age": 35}
])
conn.commit()

이 방식은 다수의 데이터를 한 번에 삽입할 때 효율적입니다.
파이썬 딕셔너리 형태로 여러 값을 전달하면 대량 삽입을 간편하게 처리할 수 있습니다.

💎 핵심 포인트:
insert는 단일 데이터뿐 아니라 여러 데이터를 동시에 추가할 수 있으며, SQLAlchemy Core는 자동으로 바인딩 처리하여 보안성과 효율성을 동시에 보장합니다.



🔎 select로 데이터 조회하기

데이터베이스에서 가장 많이 사용되는 작업 중 하나는 데이터를 불러오는 select 구문입니다.
SQLAlchemy Core의 select는 SQL의 SELECT 구문을 객체지향적으로 표현하며, 필요한 컬럼을 지정하거나 조건을 추가해 데이터를 조회할 수 있습니다.
이는 SQL을 직접 작성하지 않고도 직관적이고 안전하게 원하는 데이터를 가져올 수 있게 해줍니다.

📌 기본 select 구문 사용법

CODE BLOCK
from sqlalchemy import select

stmt = select(users)
result = conn.execute(stmt)

for row in result:
    print(row)

위 예시는 users 테이블의 모든 데이터를 조회하는 방법을 보여줍니다.
select() 함수에 테이블 객체를 넘겨주면 SELECT * FROM users와 동일한 결과를 얻을 수 있습니다.

📌 특정 컬럼만 조회하기

CODE BLOCK
stmt = select(users.c.name, users.c.age)
result = conn.execute(stmt)

for row in result:
    print(row.name, row.age)

원하는 컬럼만 지정해 효율적으로 데이터를 조회할 수 있습니다.
이 방식은 대규모 데이터베이스에서 불필요한 데이터 로딩을 방지하고 성능을 최적화합니다.

📌 조건(where) 조회하기

CODE BLOCK
stmt = select(users).where(users.c.age > 25)
result = conn.execute(stmt)

for row in result:
    print(row)

where()를 사용하면 조건문을 지정해 원하는 데이터만 필터링할 수 있습니다.
이 구문은 SQL의 WHERE 절과 동일하게 동작하며, 복잡한 조건도 파이썬식 표현으로 쉽게 다룰 수 있습니다.

💡 TIP: select를 사용할 때는 필요한 컬럼만 지정하고 조건을 함께 사용하는 것이 성능 최적화에 큰 도움이 됩니다.

✏️ update로 데이터 수정하기

데이터베이스에서 이미 존재하는 데이터를 변경할 때는 update 구문을 사용합니다.
SQLAlchemy Core의 update는 SQL의 UPDATE 구문을 안전하게 표현해 주며, 특정 조건을 지정해 원하는 행만 업데이트할 수 있습니다.
이 과정에서 values()를 활용해 변경할 컬럼과 값을 정의합니다.

📌 기본 update 구문 사용법

CODE BLOCK
from sqlalchemy import update

stmt = update(users).where(users.c.name == "Alice").values(age=28)
conn.execute(stmt)
conn.commit()

위 예시는 이름이 “Alice”인 사용자의 나이를 28로 수정하는 코드입니다.
update() 구문에 where()와 values()를 결합해 원하는 조건과 수정값을 지정합니다.

📌 여러 행 한번에 수정하기

CODE BLOCK
stmt = update(users).where(users.c.age < 30).values(age=30)
conn.execute(stmt)
conn.commit()

이 코드는 나이가 30세 미만인 모든 사용자의 나이를 30으로 일괄 수정합니다.
조건에 따라 여러 레코드를 동시에 변경할 수 있으며, 대량 데이터 갱신에도 활용할 수 있습니다.

💎 핵심 포인트:
update는 반드시 where 조건과 함께 사용하는 것이 좋습니다. 조건을 지정하지 않으면 테이블 전체 데이터가 수정될 수 있으니 주의가 필요합니다.

⚠️ 주의: update 구문에서 where 조건을 생략하면 모든 행이 변경됩니다. 반드시 필요한 조건을 지정해 안전하게 사용하세요.



🗑️ delete로 데이터 삭제하기

데이터베이스에서 불필요한 데이터를 제거할 때는 delete 구문을 사용합니다.
SQLAlchemy Core는 SQL의 DELETE 구문을 직관적으로 다룰 수 있도록 지원하며, where 절을 사용해 삭제 대상을 정확히 지정할 수 있습니다.
이를 통해 안전하고 효율적으로 데이터를 관리할 수 있습니다.

📌 기본 delete 구문 사용법

CODE BLOCK
from sqlalchemy import delete

stmt = delete(users).where(users.c.name == "Bob")
conn.execute(stmt)
conn.commit()

이 예시는 이름이 “Bob”인 행을 삭제하는 코드입니다.
where 절을 통해 특정 조건을 반드시 지정해야 안전하게 데이터를 삭제할 수 있습니다.

📌 여러 행 삭제하기

CODE BLOCK
stmt = delete(users).where(users.c.age < 30)
conn.execute(stmt)
conn.commit()

위 코드는 나이가 30세 미만인 모든 사용자 데이터를 한 번에 삭제합니다.
조건을 통해 삭제 대상을 명확히 지정하면 대량 데이터 처리도 안전하게 수행할 수 있습니다.

💎 핵심 포인트:
delete 구문은 항상 조건(where)과 함께 사용해야 하며, 조건을 지정하지 않으면 테이블의 모든 데이터가 삭제될 수 있습니다.

⚠️ 주의: delete 문에서 조건을 생략하면 전체 데이터가 삭제됩니다. 되돌릴 수 없으므로 항상 신중히 사용해야 합니다.

자주 묻는 질문 (FAQ)

SQLAlchemy Core와 ORM은 무엇이 다른가요?
Core는 SQL 표현식 언어를 사용해 쿼리를 직접 작성하는 방식이며, ORM은 클래스와 객체를 활용해 데이터베이스를 다루는 방식입니다. 더 세밀한 제어가 필요하다면 Core, 객체 지향적으로 개발하고 싶다면 ORM이 적합합니다.
insert와 bulk_insert의 차이점은 무엇인가요?
insert는 단일 또는 소규모 데이터를 추가할 때 적합하며, bulk_insert는 대량 데이터를 빠르게 삽입할 때 성능상 유리합니다. 다만 bulk_insert는 일부 DB 엔진에서만 지원되는 방식입니다.
select 결과를 딕셔너리 형태로 받을 수 있나요?
네, result.mappings() 메서드를 사용하면 조회 결과를 딕셔너리 형태로 변환할 수 있습니다. 컬럼 이름을 키로 하여 직관적으로 데이터를 다룰 수 있습니다.
update 구문에서 여러 컬럼을 동시에 수정할 수 있나요?
가능합니다. values() 메서드에 딕셔너리 형태로 여러 컬럼과 값을 전달하면 한 번의 쿼리로 동시에 수정할 수 있습니다.
delete 구문에서 특정 조건을 여러 개 넣을 수 있나요?
네, where 절에서 and_(), or_() 같은 논리 연산자를 사용하면 여러 조건을 조합할 수 있습니다. 복잡한 조건도 파이썬식으로 표현 가능합니다.
SQLAlchemy Core는 어떤 데이터베이스를 지원하나요?
SQLite, MySQL, PostgreSQL, Oracle, MSSQL 등 주요 관계형 데이터베이스를 대부분 지원합니다. DB 드라이버만 맞게 설정하면 쉽게 연결할 수 있습니다.
SQLAlchemy Core로 트랜잭션을 관리할 수 있나요?
네, begin()을 사용해 트랜잭션을 시작하고 commit() 또는 rollback()을 호출해 트랜잭션을 제어할 수 있습니다. 이를 통해 데이터 무결성을 보장할 수 있습니다.
Core에서 ORM으로 전환이 쉬운가요?
네, Core로 작성한 테이블 정의를 ORM에서도 그대로 사용할 수 있어 전환이 비교적 쉽습니다. 따라서 초기에는 Core로 시작해도 추후 ORM으로 확장 가능합니다.

📌 SQLAlchemy Core 데이터 조작 완벽 정리

지금까지 파이썬에서 SQLAlchemy Core를 활용해 insert, select, update, delete를 다루는 방법을 살펴봤습니다.
Core는 SQL 구문을 파이썬 객체로 표현할 수 있어 더욱 안전하고 가독성 있는 코드 작성이 가능합니다.
특히 SQL 인젝션 방지, 다양한 데이터베이스 지원, 트랜잭션 관리 등 실무에서 꼭 필요한 기능을 갖추고 있어 데이터베이스 프로그래밍의 핵심 도구라 할 수 있습니다.

insert로 새로운 데이터를 추가하고, select로 원하는 데이터를 조회하며, update로 특정 조건에 맞는 데이터를 수정하고, delete로 불필요한 데이터를 제거하는 과정을 단계별로 배웠습니다.
각 구문은 모두 where 조건과 함께 사용해 안전성을 확보하는 것이 중요하며, 성능 최적화를 위해 필요한 컬럼만 선택하거나 대량 작업 시 효율적인 방식으로 접근하는 것이 좋습니다.

SQLAlchemy Core는 단순한 학습용을 넘어 실제 프로젝트에서도 충분히 활용할 수 있는 강력한 라이브러리입니다.
이제 여러분도 Core를 활용해 안정적이고 유지보수하기 좋은 데이터베이스 코드를 작성할 수 있을 것입니다.


🏷️ 관련 태그 : 파이썬데이터베이스, SQLAlchemy, SQLAlchemyCore, 파이썬SQL, 데이터삽입, 데이터조회, 데이터수정, 데이터삭제, 파이썬프로그래밍, 백엔드개발