SQLAlchemy를 사용한 Python에서 데이터 삽입 및 업데이트 예제
이 예제에서는 SQLAlchemy를 사용하여 데이터베이스에 데이터를 삽입하고 업데이트하는 방법을 살펴봅니다.
필요한 것들
- Python 설치
- SQLAlchemy 설치
- 데이터베이스 (MySQL, PostgreSQL, SQLite 등)
단계
- 데이터베이스 연결 설정
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:password@host:port/database")
위 코드는 user
, password
, host
, port
, database
를 사용하여 PostgreSQL 데이터베이스에 연결합니다. 다른 데이터베이스를 사용하는 경우 해당 연결 문자열을 사용해야 합니다.
- 모델 정의
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(255))
email = Column(String(255))
address = Column(Text)
위 코드는 User
라는 이름의 테이블을 정의합니다. 이 테이블에는 id
, name
, email
, address
라는 네 개의 열이 있습니다.
- 데이터 삽입
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
user = User(name="John Doe", email="[email protected]", address="123 Main Street")
session.add(user)
session.commit()
위 코드는 User
테이블에 새 행을 삽입합니다. 새 행의 name
은 "John Doe", email
은 "[email protected]", address
는 "123 Main Street"입니다.
- 데이터 업데이트
session.query(User).filter(User.id == 1).update({"name": "Jane Doe"})
session.commit()
위 코드는 id
가 1인 사용자의 이름을 "Jane Doe"로 업데이트합니다.
추가 예제
INSERT ... ON DUPLICATE KEY UPDATE
를 사용하여 기존 레코드를 업데이트하거나 새 레코드를 삽입합니다.session.merge()
를 사용하여 기존 객체를 업데이트하거나 새 객체를 만듭니다.session.flush()
를 사용하여 데이터베이스에 변경 사항을 강제로 저장합니다.
SQLAlchemy를 사용한 Python에서 데이터 삽입 및 업데이트 예제: 코드
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy import Column, Integer, String, Text
# 데이터베이스 연결 설정
engine = create_engine("postgresql://user:password@host:port/database")
# 모델 정의
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(255))
email = Column(String(255))
address = Column(Text)
# 데이터 삽입
Session = sessionmaker(bind=engine)
session = Session()
user = User(name="John Doe", email="[email protected]", address="123 Main Street")
session.add(user)
session.commit()
print(f"사용자 추가됨: {user.id}, {user.name}, {user.email}, {user.address}")
# 데이터 업데이트
session.query(User).filter(User.id == 1).update({"name": "Jane Doe"})
session.commit()
print(f"사용자 업데이트됨: {session.query(User).filter(User.id == 1).one()}")
-
create_engine()
함수를 사용하여 PostgreSQL 데이터베이스에 연결합니다.- 사용자, 비밀번호, 호스트, 포트, 데이터베이스 이름을 지정해야 합니다.
-
declarative_base()
를 사용하여 기본 클래스를 만듭니다.User
클래스를 정의하여 데이터베이스 테이블을 나타냅니다.id
,name
,email
,address
열을 정의합니다.
-
Session
클래스를 사용하여 세션 객체를 만듭니다.- 새
User
객체를 만들고 속성을 설정합니다. session.add()
를 사용하여 객체를 세션에 추가합니다.session.commit()
을 사용하여 변경 사항을 데이터베이스에 커밋합니다.- 추가된 사용자 정보를 출력합니다.
-
session.query()
를 사용하여User
테이블에서id
가 1인 레코드를 쿼리합니다..update()
메서드를 사용하여name
열을 "Jane Doe"로 업데이트합니다.
참고:
- 이 예제는 PostgreSQL 데이터베이스를 사용하지만 다른 데이터베이스와 함께 작동하도록 조정할 수 있습니다.
INSERT ... ON DUPLICATE KEY UPDATE
,session.merge()
,session.flush()
와 같은 추가 기능을 살펴볼 수 있습니다.
SQLAlchemy를 사용한 Python에서 데이터 삽입 및 업데이트 예제: 대체 방법
INSERT 문 사용:
from sqlalchemy import text
session.execute(text("INSERT INTO users (name, email, address) VALUES (:name, :email, :address)"),
{"name": "John Doe", "email": "[email protected]", "address": "123 Main Street"})
session.execute(text("UPDATE users SET name = :name WHERE id = :id"),
{"name": "Jane Doe", "id": 1})
session.commit()
설명:
text()
함수를 사용하여 SQL 쿼리를 직접 작성합니다.- 쿼리 매개변수를 사전형으로 전달하여 SQL 주입 공격을 방지합니다.
insert() 및 update() 메서드 사용:
from sqlalchemy import insert, update
stmt = insert(users).values(name="John Doe", email="[email protected]", address="123 Main Street")
session.execute(stmt)
stmt = update(users).where(users.id == 1).values(name="Jane Doe")
session.execute(stmt)
session.commit()
insert()
및update()
메서드를 사용하여 SQL 쿼리를 생성합니다.- 쿼리 매개변수를 직접 지정할 수 있습니다.
session.merge() 사용:
user = User(name="John Doe", email="[email protected]", address="123 Main Street")
session.add(user)
session.commit()
user.name = "Jane Doe"
session.commit()
- 객체 속성을 변경하면 변경 사항이 자동으로 데이터베이스에 저장됩니다.
- 각 방법마다 장단점이 있습니다.
- 상황에 따라 적합한 방법을 선택하는 것이 중요합니다.
python sqlalchemy