728x90
반응형
UPDATE 구문
- update() 함수는 SQL의 UPDATE 구문을 생성
from sqlalchemy import update
stmt = (
update(user_table)
.where(user_table.c.name == "patrick")
.values(fullname="Patrick the Star")
)
# UPDATE user_account SET fullname=:fullname WHERE user_account.name = :name_1
- Update.values(): SET 절의 값을 설정. 여러 값을 업데이트할 때는 bindparam()을 사용하여 바인드 매개변수 설정
from sqlalchemy import update, bindparam
from sqlalchemy.orm import sessionmaker
SessionLocal = sessionmaker(bind=engine)
stmt = (
update(user_table)
.where(user_table.c.name == bindparam("oldname"))
.values(name=bindparam("newname"))
)
with SessionLocal() as session:
session.execute(
stmt,
[
{"oldname": "jack", "newname": "ed"},
{"oldname": "wendy", "newname": "mary"},
{"oldname": "jim", "newname": "jake"},
],
)
session.commit()
- subqeury() 활용
scalar_subq = select(address_table.c.email_address) # address_table의 email_address 컬럼을 선택하는 SELECT 쿼리
.where(address_table.c.user_id == user_table.c.id) # address_table의 user_id가 user_table의 id와 일치하는 조건을 추가
.order_by(address_table.c.id) # address_table의 id를 기준으로 오름차순 정렬
.limit(1) # 결과를 하나의 행으로 제한
.scalar_subquery() # 최종적으로 이 모든 조건을 포함하는 서브쿼리를 생성하여 단일 값을 반환
update_stmt = update(user_table).values(fullname=scalar_subq)
- 다중 테이블 UPDATE
update_stmt = (
update(user_table)
.where(user_table.c.id == address_table.c.user_id)
.where(address_table.c.email_address == "patrick@aol.com")
.values(
{
user_table.c.fullname: "Pat",
address_table.c.email_address: "pat@aol.com",
}
)
)
- CursorResult.rowcount: 영향을 받은 행 수 얻기
with SessionLocal() as session:
result = session.execute(
update(user_table)
.values(fullname="Patrick McStar")
.where(user_table.c.name == "patrick")
)
session.commit()
print(result.rowcount) # 업데이트된 행의 수를 출력
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[Python] 파이썬 기본 정렬 함수 알고리즘: 팀소트(Timsort) (0) | 2024.08.03 |
---|---|
[SQLAlchemy] 7. 데이터베이스 ORM 상태 관리 (0) | 2024.06.22 |
[SQLAlchemy] 5. ORM을 사용한 SELECT (0) | 2024.06.22 |
[SQLAlchemy] 4. ORM을 사용한 INSERT (0) | 2024.06.22 |
[SQLAlchemy] 3. MetaData (0) | 2024.06.22 |